当我在使用coredata多个实体的同时请求数据会导致这种现象吗? 我找不到原因,想问一下是否有这个原因
以下方法是我的程序之一,有两种类似的方法,它们可能同时出现死锁的原因是什么?
+ (NSArray*)getChat{
NSManagedObjectContext * managedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
NSError * error = nil;
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Chat" inManagedObjectContext:managedObjectContext];
[request setEntity:entity];
NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"lastMessage" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor1, nil];
[request setSortDescriptors:sortDescriptors];
NSArray * FetchResults = [[managedObjectContext executeFetchRequest:request error:&error] copy];
return FetchResults;
}
答案 0 :(得分:0)
托管对象本身不是线程安全的。如果多个线程访问NSManagedObjectContext
,这将导致死锁。 Apple推荐" Concurrency with Core Data"使用线程限制模式在Core Data
中使用并发性。根据您的应用程序,您可以尝试:
使用多个上下文,您可以通过传递objectIDs
并在其他上下文中获取对象来在上下文之间传递对象。
使用嵌套上下文可能需要更复杂的方法。这是一篇很好的文章,可以帮助您:Multi-Context CoreData。