2012-02-05 37 views
0

我創建了一個使用CoreLocation和Reverse Geocoding的自定義LocationGenerator類,並生成(當被詢問時)一個自定義位置對象。我的自定義位置對象有兩個實例變量 - 地址和GPS ...都指向兩個自定義類的實例 - 地址是一串字符串,GPS是三個浮點數 - 緯度,經度和高度。如何將對象實例導入Core數據?

位置=地址+ GPS

對於這項工作,我需要創建三個自定義類 - 位置,地址和GPS,都在各自的init方法設置的默認值。

然後我搬到了Core Data。在模型中,我有這些實體 - 項目,位置,地址和GPS。物品實體具有一些簡單的字符串屬性和位置關係。 位置實體具有地址和GPS關係。

由於我轉移到核心數據,我刪除了上面提到的自定義類位置地址和GPS,並讓Xcode根據核心數據模型生成類。

問題是,我不知道如何在LocationGenerator中創建Location實例。 我以前的位置和地址和GPS的類定義已經消失了,而在那些來自核心數據的類中,我不應該重寫init方法。但是如果這些生成的類是我新的Location對象的藍圖?

我想我的問題是,我應該如何在LocationGenerator中生成一個位置對象。 LocationGenerator是否應該在被管對象上下文中創建「位置」對象? 爲了澄清從UI的角度來看 - 我只是在創建一個項目,但它還沒有創建的過程中,它等待的位置......只有這樣它纔會插入到核心數據。 我應該看看在上下文中創建的所有對象與之前查看對象的方式相同,唯一區別在於它們在上下文中(並由CD規則管理),並且它們會一直存在?

回答

2

受管理對象(即核心數據對象,即)的指定初始值設定項是-initWithEntity:insertIntoManagedObjectContext:也就是說,如果不與託管對象關聯,則無法創建託管對象。您表示要創建該對象,然後稍後再決定是否存儲該對象。基本上有兩種方法可以做到這一點。第一種方法是讓其他一些不是NSManagedObject的對象類型,但可以在稍後決定應該保留它時使用它來填充NSManagedObject子類。另一種方法是在上下文中創建託管對象,如果事實證明您不需要它,則將其從上下文中刪除。

NSManagedObjectContexts可以被認爲是「scratch pad」。實際上,除非你的上下文中沒有任何內容,否則什麼都不會持續,所以如果你能夠確定是否將對象保存在要保存上下文的同一工作流中,第二種方法是可能是要走的路。如果這個預先保存的數據的生命週期比您使用ManagedObjectContexts執行的標準工作流程更長,那麼第一種方法可能會更好。

HTH。

相關問題