我继承的项目于2013年4月建成并推出,适用于ios 5.1,ios 6.0和ios 6.1。
然而,我刚刚将应用程序安装到具有ios7.0的iphone上,但它无效。我查看了代码,我发现应用程序从Web下载了一些JSON数据,然后当它尝试运行以下3行代码时,在第二行之后“没有任何反应”。
NSError error = nil;
BOOL isSuccessful =[self.tempMoc save:&error]; // where tempMoc is a NSManagedObjectContext
NSLog(@"errrrrrr ----- %@ --- errrrrrr", error);
当我说没有任何反应时,我的意思是代码执行在第二行停止,并且该行之后没有代码被触发。我尝试在第二行放置断点,然后进入函数,但没有任何反应...... xcode之后没有向我显示任何新内容。我的模拟器中的应用程序也会挂起。
我尝试将项目的部署目标从ios6更改为ios7。再次,这没有产生任何影响。
接下来我该怎么做?
其他说明
我一直在阅读其他堆栈溢出答案,有些人说悬挂[NSManagedObjectContext save]可能是一个线程问题。我不确定如何确认我的问题是否是一个线程问题。我知道只有一个地方调用[NSManagedObjectContext save],这就是事情悬空的地方。我试过放
[self.tempMoc.persistentStoreCoordinator lock];
在实例化self.tempMoc后,但没有效果。
答案 0 :(得分:0)
我想出了这个问题。
确实有多个线程操纵NSManagedObjectContext导致hte save函数挂起。
我的解决方案是重写代码以摆脱所有额外的线程。我只剩下主线程,这解决了这个问题。