2017-07-21 52 views
0

我的应用程序在NSMutableSet上使用NSSortDescriptor时崩溃。iOS CRASH问题 - SIGSEGV

下面是代码

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

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

这里storedHeadlines是NSMutableSet和我的排序描述符键EIKNewsHeadlineAttributeHeadlineId这是一个的NSString @"headlineId”

我的可变集包含某个类类型的对象,并且该类有一个名为headlineId的属性,我试图对该可变集进行排序。

我在一个专用队列上执行performBlock内的排序。我检查了我的weakSelfNSMutableSet。两者都不是零。

是什么导致了这个问题?

+1

你看到任何崩溃日志中不是所有的元素? –

+0

@kapsym请参阅此处的崩溃日志https://stackoverflow.com/q/44453824/1512106 – iPhoneDeveloper

回答

2

从崩溃日志看起来像你阵列中的一些元素不是NSString。说这个的行是objc_msgSend() selector name: length

这意味着阵列中的对象不会响应length选择器。

我相信问题是在JSON中对可变集解析。如果要打印该集合的内容,则在排序之前,可能会让您知道该阵列中的哪些对象是错误的。

你可以发布解析JSON的代码吗?

如果是不可能的,你可以在排序前过滤设置,消除了有型NSString

+0

正如您所说的,数组中的某些元素可能不是NSString类型的可能性。我的问题是,我如何分配一个非NSString到期望NSString重现该问题的集?我在iPhone或iPad上看不到这次崩溃,但我们的客户正面临着这个问题。 – iPhoneDeveloper

+0

感谢您的明确解释。 “objc_msgSend()选择器名称:长度”的解释正是我所期待的。感谢您解决这个问题,并为可能的工作。 – iPhoneDeveloper