【问题标题】:CoreData Relationship - Update object in relationshipCoreData 关系 - 更新关系中的对象
【发布时间】:2014-09-10 12:13:43
【问题描述】:

您好,我有一个核心数据模型,它在客户和职位代码之间具有一对多的关系。

当用户同步数据时,我会更新现有的工作代码。在某些时候,用户设备上的关系似乎出现了问题。错误是"coredata could not fulfil a fault for ....."

我通过删除客户而不是职位代码将这个错误强加到我们的测试系统中。工作代码仍然指向一个不存在的客户。

我知道这显然很糟糕,并且不能 100% 确定用户是如何遇到这种情况的,但无论如何。

当我尝试将有效客户添加到作业代码对象时引发此错误 - 即

//get a valid customer object into a variable called aCust
NSLog(%@"%@",aCust);
aJobCode.customerForJobCode=aCust;

在此行设置时报错:

aJobCode.customerForJobCode=aCust;

aCust 对象非常好,在NSLog 中显示正确的描述和关系。

我知道对象ajobCode 指向一个不存在的客户,但我现在如何将其更新为有效的客户对象?尝试为其分配一个新的客户对象会引发错误,但指的是我要替换的旧对象。

尝试[aJobCode setCustomerForObject:aCust]; 也会引发错误。我知道关系已经破裂,如何为其分配一个新的客户对象?

堆栈跟踪如下:

014-09-10 13:39:48.488 mavis[2548:1303] *** Terminating app due to uncaught exception 'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault for '0xd000000000380002 <x-coredata://016A347F-3FE5-4FD0-9BDE-76A8FFA8C8B4/Customer/p14>''
*** First throw call stack:
(
    0   CoreFoundation                      0x00000001032b8495 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x000000010204199e objc_exception_throw + 43
    2   CoreData                            0x000000010066c7e3 _PFFaultHandlerLookupRow + 1075
    3   CoreData                            0x000000010066bffb _PF_FulfillDeferredFault + 235
    4   CoreData                            0x0000000100699a7e -[NSManagedObject(_NSInternalMethods) _excludeObject:fromPropertyWithKey:andIndex:] + 142
    5   CoreData                            0x0000000100692797 -[NSManagedObject(_NSInternalMethods) _maintainInverseRelationship:forProperty:oldDestination:newDestination:] + 263
    6   CoreData                            0x000000010069221b -[NSManagedObject(_NSInternalMethods) _didChangeValue:forRelationship:named:withInverse:] + 571
    7   Foundation                          0x0000000101a07ea2 NSKeyValueNotifyObserver + 375
    8   Foundation                          0x0000000101a096f0 NSKeyValueDidChange + 467
    9   Foundation                          0x00000001019cc79c -[NSObject(NSKeyValueObserverNotification) didChangeValueForKey:] + 118
    10  CoreData                            0x0000000100679fac _PF_ManagedObject_DidChangeValueForKeyIndex + 108
    11  CoreData                            0x00000001006794bd _sharedIMPL_setvfk_core + 237
    12  mavis                               0x000000010001911b -[jobsJSONSyncVC addNewJobCodes:] + 1387
    13  mavis                               0x000000010000c3f8 -[jobsJSONSyncVC getJSONSettings] + 1656
    14  mavis                               0x000000010000bca6 __38-[jobsJSONSyncVC reachabilityChanged:]_block_invoke + 182
    15  libdispatch.dylib                   0x0000000106bea851 _dispatch_call_block_and_release + 12
    16  libdispatch.dylib                   0x0000000106bfd72d _dispatch_client_callout + 8
    17  libdispatch.dylib                   0x0000000106bedb27 _dispatch_root_queue_drain + 380
    18  libdispatch.dylib                   0x0000000106bedd12 _dispatch_worker_thread2 + 40
    19  libsystem_pthread.dylib             0x0000000106f4aef8 _pthread_wqthread + 314
    20  libsystem_pthread.dylib             0x0000000106f4dfb9 start_wqthread + 13
)
libc++abi.dylib: terminating with uncaught exception of type _NSCoreDataException

提前致谢

【问题讨论】:

  • 您能提供完整的错误/异常跟踪吗?
  • 嗨,我已将其添加到原帖中,谢谢

标签: ios core-data


【解决方案1】:

当您引用的对象已从持久存储中删除时,通常会引发此异常。一个可能产生这种情况的例子是当您引用一个对象时,即通过 tableView 等,并且您删除该对象然后尝试引用它的属性或关系。一个更模糊的情况是您的缓存已损坏,您需要清除它。如果您共享代码,也许我们可以查明问题。

【讨论】:

  • 嗨,我知道它抛出它是因为它试图访问无效关系的属性,但我不确定为什么该关系在实时系统中变得无效。在我的开发系统中,我故意只删除了客户对象,留下了引用已删除客户的 callStatus 对象,但这不是在实时系统中可以完成的事情。我很乐意分享代码,但我不确定哪些位真正相关。向对象添加数据或引用它的代码?
  • 有趣的是,我正在使用临时分发进行测试。我通过无线方式重新安装了应用程序,虽然数据仍然存在(正如预期的那样,没有数据模型更改)并且没有代码更改,但错误已经停止抛出异常。因此,无需更改数据或代码,错误就停止了。这是否表示缓存问题?我可以在开发中重新创建问题。如何强制刷新缓存?
猜你喜欢
  • 2011-05-12
  • 2016-02-08
  • 2020-11-11
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
相关资源
最近更新 更多