我在app delegate中创建了一个通用函数,可以从应用程序的任何位置访问核心数据。
- (NSMutableArray *)createFetchRequestWithPredicate:(NSPredicate *)predicate inEntity:(NSString *)str_entity {
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:str_entity];
request.predicate = predicate;
[request setReturnsObjectsAsFaults:NO];
NSMutableArray *arr_records = [[[NSMutableArray alloc] initWithArray:[[self managedObjectContext] executeFetchRequest:request error:nil]] mutableCopy];
return arr_records;
}
现在大多数时候这个功能都能正常工作。但是,在一百次左右的时间内会导致跟踪日志崩溃:
EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x00000000432b2b10
任何人都可以解决问题所在。
答案 0 :(得分:0)
我希望这是由于线程问题。由于它是通用函数,可以从应用程序的任何位置调用,因此请使用@synchronize(self){}。同时将NSError参数添加到executeFetchRequest方法并处理错误。
- (NSMutableArray *)createFetchRequestWithPredicate:(NSPredicate *)predicate inEntity:(NSString *)str_entity {
@synchronize(self) {
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:str_entity];
request.predicate = predicate;
[request setReturnsObjectsAsFaults:NO];
NSError *error = nil;
NSMutableArray *arr_records = [[[NSMutableArray alloc] initWithArray:[[self managedObjectContext] executeFetchRequest:request error:&error]] mutableCopy];
if (!error) {
return arr_records;
} else
nil;
}
}