EXC_BAD_ACCESS KERN_INVALID_ADDRESS访问核心数据时



我在应用程序委托中创建了一个通用函数,可以从应用程序中的任何位置访问核心数据。

- (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;
    }
}

最新更新