我有以下两行代码几乎一直有效:
NSError *error = nil;
BOOL isSuccessful =[self.tempMoc save:&error]; // tempMoc is a NSManagedObjectContext
此代码在ios6模拟器,ios6物理设备和ios7模拟器上按预期工作。变量isSuccessful的计算结果为是。
但是,在ios7物理设备上,isSuccessful评估为NO。那是为什么?
在所提到的所有四种情况下,错误始终为零。
有谁知道为什么会出现这种情况以及如何在ios7物理设备上获得成功评估为YES?
其他详细信息
经过更多调试后,我发现了一些东西。在上面tempMoc save
之前,我运行了此代码:
- (void)saveCompatibilities:(NSArray *)objects {
NSString *entityName = NSStringFromClass([Compatibility class]);
for (NSDictionary *newObjectDict in objects) {
Compatibility *object = [NSEntityDescription insertNewObjectForEntityForName:entityName inManagedObjectContext:self.tempMoc];
object.prod1 = newObjectDict[@"prod1"]; // value is just the letter a
object.prod2 = newObjectDict[@"prod2"]; // value is just the letter a
}
}
我注意到如果for循环中的迭代次数非常大,比如让我们说50 000个循环,那么我会遇到上面提到的ios7 isSuccessful == NO问题。如果只说20个循环,则isSuccessful评估为是。导致ios7 isSuccessful失败的循环次数因每次运行而不同。
我开始认为这是我设备的内存问题?
答案 0 :(得分:1)
听起来像是一个记忆问题。尝试定期保存或内存压力。您还可以创建子上下文以保存在不同的线程上。