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

问题描述 投票:0回答:1

我有以下代码删除所有'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)上安装它时,它崩溃了:

线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x918038d0)

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

警告:无法执行支持代码来读取进程中的Objective-C类数据。这可能会降低可用类型信息的质量。

我无法弄清楚这里出了什么问题。

UPDATE

我已启用僵尸对象并记录日志

[CFNumber isEqual:]:发送到解除分配的实例0x18d0b0b0的消息

self.allInteractions是以下类的数组:

@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;
ios ios9 nspredicate ios10.3
1个回答
0
投票

我终于能够解决这个问题了。它与谓词无关,即使它在使用谓词实现过滤期间​​崩溃了。在交互模型中,服务器属性被指定为(非原子,分配),并将其分配给强,就像修复此问题的其他属性一样。

@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在iOS 11中运行良好,但在较低版本中,使用assign可以进行解除分配。

© www.soinside.com 2019 - 2024. All rights reserved.