核心数据关系 - 更新关系中的对象

时间:2014-09-10 12:13:44

标签: ios core-data

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

当用户同步数据时,我会更新现有的职位代码。在某些时候,用户设备上的关系似乎出现了问题。错误为"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

提前致谢

1 个答案:

答案 0 :(得分:0)

通常在从持久性存储中删除要引用的对象时抛出此异常。可以生成这个的一个例子是当你有一个对象的引用时,即通过tableView等,你删除了对象,然后尝试引用它的属性或关系。一个更加模糊的案例是您的缓存已损坏,您需要清除它。如果您共享代码,我们可以查明问题。