[英]My program is often a deadlock,I don't know why,If I used coredata
当我同时使用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;
}
受管对象本身不是线程安全的。 如果多个线程访问NSManagedObjectContext
将导致死锁。 Apple建议在“ 使用Core Data进行并发 ”中使用线程限制模式来处理Core Data
并发。 根据您的应用程序,您可以尝试:
有了多个上下文,您可以通过在对象之间传递objectIDs
并在另一个上下文中获取它们来在对象之间传递objectIDs
。
您可能需要使用嵌套上下文的更复杂的方法。 这是一篇很好的文章,可以帮助您: Multi-Context CoreData 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.