Фильтрация массива объектов с использованием предикатных сбоев на устройствах iOS 9 и 10 - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть следующий код для удаления всех объектов со значением '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 в процессе.Это может снизить качество доступной информации о типе.

Я не могу понять, что здесь происходит не так.

ОБНОВЛЕНИЕ

Я включил объекты зомби, и он регистрирует

[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;

1 Ответ

0 голосов
/ 19 сентября 2018

Мне наконец удалось разобраться с этой проблемой.Он не был связан с предикатом, даже если произошел сбой во время реализации фильтрации с использованием предиката.В модели взаимодействия свойство 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;

Назначение работало хорошо в iOS 11, но в более ранних версиях освобождение освобождаетможет произойти с помощью assign.

...