有时在使用Core-Data对象时,应用程序崩溃并出现错误:
CoreData:错误:NULL _cd_rawData但对象没有变成错误
从我可以研究和从互联网上读取的内容来看,当在两个线程之间传递托管对象上下文并且MOC不是线程安全时会发生这种情况.
每当我想从CD对象访问属性时,就会出现此崩溃.
如果我有Person对象并且想要访问Perosn.name,则应用程序可能会因此错误而崩溃(如前所述,它发生在我随机看到的情况下,我无法重现它,有时它会连续发生10次然后不会发生一两天).
当看到这个问题时,似乎这发生在我获得并更新Person的朋友关系时(这是在后台线程上完成的,保存并合并到主线程MOC).
我想获得更多关于这里发生了什么的信息,为什么这个错误发生,因为它似乎很随机,如果有任何方法可以防止崩溃.
以下是保存上下文的代码:
__block MyAppDelegate *blockSelf = self;
dispatch_async(dispatch_get_main_queue(), ^{
[blockSelf.managedObjectContext performBlock:^{
[blockSelf.managedObjectContext save:nil];
dispatch_async(blockSelf.core_data_queue, ^{
[blockSelf.writerContext performBlock:^{
[blockSelf.writerContext save:nil];
}];
});
}];
});
Run Code Online (Sandbox Code Playgroud)
更新1 有时在执行saveContext时,我会收到以下错误:
"错误域= NSCocoaErrorDomain代码= 1550"无法完成操作.(可可错误1550.)
悬挂对无效对象的引用.= null
NSLocalizedDescription =无法完成操作.(可可错误1550.),NSValidationErrorValue =托管对象上的"朋友"关系(0x201cd340)
UID:<4C1B48C8-6309-4E8E-A590-DED497907A3A>.资产ID :( null).with objects {(\n'(null)'UID:<(null)>.)}}"
我从另一个SO问题中找到了这个答案:"这是因为在不同的上下文中创建了对象,不要注意不同的线程在同一个线程上的不同上下文."
这似乎是这种情况,如果它是如何找到对象在不同的上下文中创建的位置,那就是我要保存到的...
例如,我有两个ArrayCollection - firstAC和secondAC.如果我做secondAC = firstAC,而不是我对secondAC进行了更改(或许在它上面放了一个过滤器函数)它以某种方式传播到firstAC,有人会告诉我为什么会在Flex或Actionscript 3中发生这种情况吗?
如果我只希望secondAC从firstAC获取所有数据,但是当我对secondAC进行更改时,它不会在firstAC中显示,我该怎么办?
Thanxs一堆为答案!拉吉斯拉夫
我想创建一个具有从变量中获取的键名的Object.可能这还不够明确,所以让我举个例子.
我有两个变量var str1:String ='firstKey'; 和str2:String ='secondKey';
我怎样才能创建一个看起来像这样的对象:
var obj:Object = {firstKey:'some value',secondKey:'some other value'},注意firstKey和secondKey是变量str1和str2的值.
做obj = {str1:'some value',str2:'some other value'}不会产生我想要的结果
Thanx一堆为答案!拉迪斯拉夫·克林克
我创建了一个计算器类,它可以执行基本的+, - ,%,*和sin,cos,tan,sqrt和其他数学函数.
我有double类型的所有变量,一切都适用于大数字,所以我可以计算像1.35E122这样的数字,但问题是极少数.例如,如果我做计算1/98556321我得到0我想要得到的东西1.01464E-8.
我应该重写我的代码,以便我只操纵它NSDecimalNumber
,如果是这样,我该怎么处理sin和cos数学函数只接受double和long double值.
apache-flex ×2
ios ×2
core-data ×1
document ×1
image ×1
ipad ×1
iphone ×1
latex ×1
objective-c ×1
reference ×1