如何清除该死的核心数据对象?
请原谅,我只想删除对象20分钟。删除就好了,但Core Data会在一段时间后引发异常。
我到目前为止尝试过:
删除所有对象(MR_truncateAll
),然后保存。
删除所有对象,处理挂起的更改,保存。
关闭撤消管理器,删除,转回撤消管理器。
删除核心数据sqlite
文件,销毁上下文,然后重新创建。
使用[MagicalRecord cleanUp]
,删除核心数据sqlite
文件。
但是,当我想创建对象时,经过2-3次尝试后,我会得到错误,然后因为错误而崩溃。
CoreData could not fulfill a fault for '0xd000000000840002 <x-coredata://...
(
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在引擎盖下创建。
如何删除,刷新核心数据?
答案 0 :(得分:7)
这应该对你有用
[ClassName MR_truncateAll];
[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];
这里的ClassName是您实体的NSManagedObject子类。
答案 1 :(得分:-1)
这可行,但我不确定实体是否真的被删除了(但我希望)。
仍然会在每2-3次尝试时显示失败错误,但不会抛出错误。我无法相信他们无法结束[NSPersistentStoreCoordinator deleteEveryStuffSeriouslyNotKidding]
方法。
// 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];