【问题标题】:iOS CRASH issue - SIGSEGViOS 崩溃问题 - SIGSEGV
【发布时间】:2017-07-21 09:23:21
【问题描述】:

我的应用程序在 NSMutableSet 上使用 NSSortDescriptor 时崩溃。

这里是代码

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

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

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

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

我正在私有队列上的 performBlock 内执行此排序。 我检查了我的weakSelfNSMutableSet。两者都不为零。

导致问题的原因是什么?

【问题讨论】:

标签: ios core-data crash nssortdescriptor


【解决方案1】:

从崩溃日志看来,您数组中的某些元素不是NSString。说明这一点的行是objc_msgSend() selector name: length

这意味着数组中的对象不响应length 选择器。

我认为问题出在 JSON 到可变集解析中。如果您要在排序之前打印集合的内容,它可能会让您知道数组中的哪些对象是错误的。

您能发布解析 JSON 的代码吗?

如果不可能,可以在排序前过滤集合,排除所有不属于NSString类型的元素

【讨论】:

  • 正如您所说,数组中的某些元素可能不是 NSString 类型。我的问题是如何将非 NSString 分配给期望 NSString 重现问题的集合?我没有在我的 iPhone 或 iPad 上看到这种崩溃,但我们的客户正面临这个问题。
  • 感谢您的清晰解释。 “objc_msgSend() 选择器名称:长度”的解释正是我想要的。感谢您清除它并提供可能的解决方法。
猜你喜欢
  • 1970-01-01
  • 2017-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多