小编Kir*_*mov的帖子

xCode 7.0 IOS9 SDK:使用performBlockAndWait执行获取请求时出现死锁

更新:我准备了重现问题的样本,没有神奇的记录.请使用以下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)

deadlock core-data ios magicalrecord ios9

6
推荐指数
1
解决办法
1211
查看次数

标签 统计

core-data ×1

deadlock ×1

ios ×1

ios9 ×1

magicalrecord ×1