[iOS] Core Data Error: 不知道何時被刪掉了
Jul 24, 2017 · 2 min read
前言
遇到像這樣的錯誤訊息:
// EXC_BREAKPOINT
CoreData _sharedIMPL_pvfk_core + 304查了一下,發現似乎是因為managed object要用的時候,被別的線程刪除了,不知道是被系統還是被自己刪掉的,所以使用前要先檢查。
處理
RestKit
由於我是用RestKit去處理core data,這裡面有一個API:
- (BOOL)hasBeenDeleted這是說你的物件已經被刪除,然後也save到persistent store了,那他就會回傳YES。
Core Data
相對於Core data提供的API
@property (nonatomic, getter=isDeleted, readonly) BOOL deleted;這是說你把物件刪除了,然後你會在下一次的save時把這更動寫入,那他就會跟你說YES。
另一種檢查的方法是看物件的managedObjectContext還在不在,在NSManagedObject裡面有寫這個property的說明:
May be
nilif the receiver has been deleted from its context.
不過也是有可能(May)而已,所以這不是很可靠。
實作
如果單純用Core data裡面的方法去檢查,簡單的寫法就像這樣:
- (BOOL) entityWasDeleted:(SomeEntity *)someEntity {
return ((someEntity == nil) || ([self.moc existingObjectWithID:someEntity.objectID error:NULL] == nil));
}請參考網路上的解答。
