使用谓词过滤对象数组在 iOS 9 和 10 设备上崩溃

Filtering array of objects using predicate crashes on iOS 9 and 10 devices

我有以下代码来删除所有 'sever' 值等于 -1 的对象。我的代码如下:

NSMutableArray *sortedArray = [[NSMutableArray alloc] initWithArray:self.allInteractions];
//Removing all interactions with severity equal to -1
NSPredicate *severityPredicate = [NSPredicate predicateWithFormat:@"sever != %@", @-1];
[sortedArray filterUsingPredicate:severityPredicate];

这在 iOS 11 设备和模拟器上运行良好。它在 iOS 9 和 10 模拟器上也运行良好。但是当我尝试在 iPad(iOS 9.2) 和 iPhone 5 (10.3.3) 上安装它时,它崩溃了:

Thread 1: EXC_BAD_ACCESS (code=1, address=0x918038d0)

并且还会在控制台上显示以下警告:

warning: could not execute support code to read Objective-C class data in the process. This may reduce the quality of type information available.

我不知道这里出了什么问题。

更新

我启用了僵尸对象并且它记录

[CFNumber isEqual:]: message sent to deallocated instance 0x18d0b0b0

self.allInteractions 是以下 class 的数组:

@interface Interaction : NSObject

@property (nonatomic, strong) NSString *class1;
@property (nonatomic, strong) NSString *subject;
@property (nonatomic, strong) NSString *object;
@property (nonatomic, strong) NSString *details;
@property (nonatomic, assign) NSNumber *sever;

我终于解决了这个问题。它与谓词无关,即使它在使用谓词进行过滤的过程中崩溃了。在交互模型中,服务器 属性 被分配为 (nonatomic, assign) 并像其他属性一样将 assign 替换为 strong 解决了这个问题。

@interface Interaction : NSObject

@property (nonatomic, strong) NSString *class1;
@property (nonatomic, strong) NSString *subject;
@property (nonatomic, strong) NSString *object;
@property (nonatomic, strong) NSString *details;
@property (nonatomic, strong) NSNumber *sever;

Assign 在 iOS11 中运行良好,但在较低版本中,可以使用 assign 进行释放。