2010-06-09 522 views

回答

5

objectWithID:假定對象存在,所以如果你給它一個壞的ID,當你試圖在返回的實體訪問屬性會拋出異常。而且,這個方法總是返回一個實體。

existingObjectWithID:error:將返回一個對象,如果它存在和nil,如果它不存在。如果出現錯誤,它將填充錯誤指針。也就是說,它在此NSManagedObjectContext創建的,或已被提取(或使用objectWithID:檢索) - 如果它已經登記

+0

我試過objectWithID:它不會拋出任何異常。請參閱http://stackoverflow.com/questions/3013194/must-i-explicitely-enable-exceptions-in-xcode – dontWatchMyProfile 2010-06-10 09:53:54

6

我相信existingObjectWithID:error:回報,只有當它已經被註冊與接收方面的實例。 objectWithID:可能會返回尚未註冊(拉入)接收上下文的對象的錯誤。

+1

如果對象不在當前上下文中,該文檔實際上指示'existingObjectWithID:error:'將查詢持久性存儲。只有當它找不到對象時纔會出錯。這是獲取現有對象的最明確的方法,而不是關心對象是否存在的'objectWithID:'和'objectRegisteredWithID:',這需要對象已經加載到上下文中。 – 2013-12-26 22:17:12

-1

existingObjectWithID:error:將返回的對象。否則返回nil。該方法無法找到數據存儲中但從未被此上下文檢索到的管理對象。如果這個方法得到一個壞的id或者一個已經被刪除的對象的id,它將永遠不會拋出異常。

數據存儲區中尚未檢索到的受管對象可能會因故障而丟失objectWithID: - 現在它將被註冊並可被訪問。如果objectID不合適或對象已被刪除,則會引發異常。

需要注意的是對象ID 將在第一個變化(從臨時到永久ID)保存,所以不要指望創建一個對象,保持對它的引用原來的ID,然後恢復是非常重要的它在保存後使用該ID。您可以撥打電話isTemporaryID以確定保存後對象ID是否會更改。

+0

如果您處於子上下文中並且該對象在父級中註冊,該怎麼辦?即使子上下文尚未註冊此對象,子項上的ExistingObjectWithID也會通過父項返回。那是對的嗎? – bandejapaisa 2013-05-03 19:53:28

+3

聲明:「此數據存儲中的一個託管對象通過此方法找不到,但此方法從未檢索到該對象。」是錯誤的。 'existingObjectWithID:error:'在上下文中查找對象,如果沒有找到它,它將查找上下文的父上下文(以及上下文的父上下文等)或上下文的持久存儲直到找到它。如果發現它,則將其錯誤地放入上下文中並返回。如果沒有找到它,則返回'nil'。 – Peyman 2014-06-18 21:50:41

相關問題