如何删除每个Core Data实体而不出现故障错误?

8 浏览
0 Comments

如何删除每个Core Data实体而不出现故障错误?

如何清除该死的Core Data对象?

请原谅措辞,请允许我删除对象已经20分钟了。删除正常,但是Core Data过了一会儿就会引发异常。

我尝试了以下方法:

删除所有对象(MR_truncateAll),然后保存。

删除所有对象,处理待定更改,保存。

关闭撤消管理器,删除,然后重新启用撤消管理器。

删除Core Data的sqlite文件,销毁上下文,然后重新创建。

使用[MagicalRecord cleanUp],删除Core Data的sqlite文件。


然而,当我想要创建对象时,经过2-3次尝试后,我会得到错误,然后崩溃。

CoreData无法对'0xd000000000840002 进行加载

(
    0   CoreFoundation                      0x0000000102016795 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x0000000101d79991 objc_exception_throw + 43
    2   CoreData                            0x0000000100265a93 _PFFaultHandlerLookupRow + 1075
    3   CoreData                            0x00000001002f33a3 -[NSManagedObject(_NSInternalMethods) _updateFromRefreshSnapshot:includingTransients:] + 243
    4   CoreData                            0x0000000100297563 -[NSManagedObjectContext(_NestedContextSupport) _copyChildObject:toParentObject:fromChildContext:] + 771
    5   CoreData                            0x000000010029701b -[NSManagedObjectContext(_NestedContextSupport) _parentProcessSaveRequest:inContext:error:] + 1019
    6   CoreData                            0x00000001002fd243 __82-[NSManagedObjectContext(_NestedContextSupport) executeRequest:withContext:error:]_block_invoke + 563
    7   libdispatch.dylib                   0x0000000102ce005a _dispatch_barrier_sync_f_slow_invoke + 45
    8   libdispatch.dylib                   0x0000000102cef6fd _dispatch_client_callout + 8
    9   libdispatch.dylib                   0x0000000102cdf46c _dispatch_main_queue_callback_4CF + 354
    10  CoreFoundation                      0x0000000102074729 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9
    11  CoreFoundation                      0x0000000101fc19a4 __CFRunLoopRun + 1764
    12  CoreFoundation                      0x0000000101fc0ed3 CFRunLoopRunSpecific + 467
    13  GraphicsServices                    0x00000001032f03a4 GSEventRunModal + 161
    14  UIKit                               0x0000000100e48a63 UIApplicationMain + 1010
    15  GitHub!                             0x0000000100002f53 main + 115
    16  libdyld.dylib                       0x0000000102f9c7e1 start + 0
)

我使用的是单一上下文,由MagicalRecord在后台创建。

你如何删除、清除Core Data?

0
0 Comments

问题:如何解决删除Core Data实体时出现的错误?

原因:在删除Core Data实体时,可能会出现Faulting错误。这些错误可能是由于未正确处理上下文或持久存储引起的。

解决方法:使用以下方法来删除每个Core Data实体,同时避免Faulting错误的发生。

[ClassName MR_truncateAll];
[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];

这里的ClassName是您的实体的NSManagedObject子类。如果将MR_truncateAll放在[MagicalRecord saveWithBlockAndWait:^{}]内部,可能会更安全。

以上方法可帮助您删除Core Data实体并避免Faulting错误的发生。

0
0 Comments

问题的原因是删除Core Data实体时出现了错误。解决方法是在删除前保存更改并在删除后及时保存更改。

以下是整理后的文章:

这个问题的原因是,在删除Core Data实体时出现了错误。解决方法是在删除前保存更改并在删除后及时保存更改。

代码示例中使用了以下方法来删除实体:

// Cut every retaining references.
self.someEntity = nil;
self.entityUsingRelations = nil;
[self.context processPendingChanges];
[[self.context undoManager] disableUndoRegistration];
// You can use simple Core Data `delete` methods.
[SomeEntity MR_truncateAll];
[ReleatiedEntity MR_truncateAll];
[AnotherReleatedEntity MR_truncateAll];
[EntityUsingRelations MR_truncateAll];
[self.context processPendingChanges];
[[self.context undoManager] enableUndoRegistration];
[self.context MR_saveToPersistentStoreAndWait];

然而,这段代码中存在一个问题,即实际上没有将删除操作保存到存储中。`MR_truncateAll`方法只是标记了这些对象在下次保存时删除。要解决这个问题,需要在删除后立即保存更改。

另外,有时仍然会出现错误的情况。这可能是由于Core Data的一些意外行为导致的。不过,在这个例子中,只有30个实体被处理,而在第100到第150个实体时才会出现错误。尽管存在这些问题,但是thermal-core.com/CoreDataEditor显示的是正确的30个实体。这表明Core Data的行为有时很难理解,但我们要理解它是为了性能而设计的。

0