更新:我准备了重现问题的样本,没有神奇的记录.请使用以下URL下载测试项目:https://www.dsr-company.com/fm.php?Download = 1& FileToDL = DeadLockTest_CoreDataWithoutMR.zip
提供的项目有以下问题:从主线程调用的performBlockAndWait中的fetch死锁.
如果使用XCode版本> 6.4编译代码,则会重现该问题.如果使用xCode == 6.4编译代码,则不会重现该问题.
老问题是:
我正致力于IOS移动应用程序的支持.在最近将Xcode IDE从版本6.4更新到版本7.0(支持IOS 9)之后,我遇到了一个关键问题 - 应用程序挂起.使用xCode 6.4的相同构建的应用程序(由相同的源生成)可以正常工作.因此,如果应用程序是使用xCode> 6.4构建的 - 应用程序在某些情况下会挂起.如果应用程序是使用xCode 6.4构建的 - 应用程序工作正常.
我花了一些时间研究这个问题,结果我准备了测试应用程序和类似的情况,就像在我的应用程序中重现问题一样.测试应用程序挂起在Xcode> = 7.0上,但在Xcode 6.4上正常工作
下载测试源的链接:https: //www.sendspace.com/file/r07cln
测试应用程序的要求是:1.必须在系统中安装cocoa pods manager 2.版本2.2的MagicalRecord框架.
测试应用程序按以下方式工作:1.在应用程序启动时,它创建具有10000个简单实体记录的测试数据库,并将它们保存到持久存储.2.在方法viewWillAppear中的应用程序的第一个屏幕上:它运行导致死锁的测试.使用以下算法:
-(NSArray *) entityWithId: (int) entityId inContext:(NSManagedObjectContext *)localContext
{
NSArray * results = [TestEntity MR_findByAttribute:@"id" withValue:[ NSNumber numberWithInt: entityId ] inContext:localContext];
return results;
}
…..
int entityId = 88;
NSManagedObjectContext *childContext1 = [NSManagedObjectContext MR_context];
childContext1.name = @"childContext1";
NSManagedObjectContext *childContext2 = [NSManagedObjectContext MR_context]; …Run Code Online (Sandbox Code Playgroud)