繁体   English   中英

我的程序经常是死锁,我不知道为什么,如果我使用coredata

[英]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并发。 根据您的应用程序,您可以尝试:

  1. 为每个线程创建一个单独的管理对象上下文,并共享一个持久存储协调器。
  2. 或为每个线程创建一个单独的管理对象上下文和持久性存储协调器。

有了多个上下文,您可以通过在对象之间传递objectIDs并在另一个上下文中获取它们来在对象之间传递objectIDs

您可能需要使用嵌套上下文的更复杂的方法。 这是一篇很好的文章,可以帮助您: Multi-Context CoreData

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM