我在应用程序委托中创建了一个通用函数,可以从应用程序中的任何位置访问核心数据。
- (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
任何人都可以弄清楚问题出在哪里。
我希望
这是由于线程问题。由于它是通用函数,可以从应用程序中的任何位置调用,因此请使用 @synchronize(self( { } 。还要添加NSError参数来执行FetchRequest方法并处理错误。
- (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;
}
}