2017-07-21 7 views
0

Meine Anwendung stürzt ab, während NSSortDescriptor auf einem NSMutableSet verwendet wird.iOS CRASH Problem - SIGSEGV

Hier ist der Code

NSArray *sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:EIKNewsHeadlineAttributeHeadlineId ascending:YES]]; 

NSArray *orderedHeadlines = [weakSelf.storedHeadlines sortedArrayUsingDescriptors:sortDescriptors]; 

Hier storedHeadlines ist die NSMutableSet und meine Art Descriptor Schlüssel EIKNewsHeadlineAttributeHeadlineId, die eine NSString @"headlineId”.

Meine veränderbare Menge enthält Objekte eines bestimmten Klassentyps und diese Klasse hat eine Eigenschaft namens headlineId, auf der ich versuche, die veränderbare Menge zu sortieren.

Ich führe diese Sortierung innerhalb einer performBlock auf einer privaten Warteschlange. Ich überprüfte meine weakSelf und die NSMutableSet. Beide sind nicht null.

Was verursacht das Problem?

+1

Sie jedes Crash-Protokoll sehen Sie? –

+0

@ Kapsym pls siehe das Crash-Protokoll hier https://Stackoverflow.com/q/44453824/1512106 – iPhoneDeveloper

Antwort

2

Aus dem Crash-Protokoll sieht es so aus, als ob einige der Elemente in Ihrem Array nicht NSString sind. Die Zeile, die dies besagt, ist objc_msgSend() selector name: length

Das bedeutet, dass die Objekte in dem Array nicht auf dem length Selektor reagieren.

Ich glaube, das Problem ist in der JSON zu veränderbaren Satz Parsing. Wenn Sie den Inhalt des Satzes direkt vor dem Sortieren drucken würden, könnte es Ihnen eine Vorstellung davon geben, welche Objekte im Array die falschen sind.

Können Sie den Code posten, der den JSON analysiert?

Wenn es nicht möglich ist, können Sie die Set-Filter vor dem Sortieren, alle Elemente zu beseitigen, die nicht vom Typ sind NSString

+0

Wie Sie gesagt haben, gibt es eine Möglichkeit, dass einige Elemente im Array möglicherweise nicht vom Typ NSString sind. Meine Frage ist, wie ich einem Satz eine Nicht-NSS-Zeichenkette zuweisen kann, die NSString erwartet, um das Problem zu reproduzieren? Ich sehe diesen Absturz nicht auf meinen iPhones oder iPads, aber unsere Kunden sehen sich dem Problem gegenüber. – iPhoneDeveloper

+0

Danke für eine klare Erklärung. Die Erklärung für "objc_msgSend() selector name: length" ist genau das, wonach ich gesucht habe. Danke, dass du das ausgemacht hast und für die mögliche Arbeit. – iPhoneDeveloper