如何删除每个Core Data实体而不出现故障错误?
如何删除每个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?
问题:如何解决删除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错误的发生。
问题的原因是删除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的行为有时很难理解,但我们要理解它是为了性能而设计的。