2011-12-27 77 views
4

我有這個命令行應用程序,通過CSV文件迭代創建一個核心數據SQLite商店。在某些時候,我要建這些SPStop對象,其中有routesschedules一對多關係:核心數據關係沒有保存到商店

SPRoute *route = (SPRoute*)[self.idTransformer objectForOldID:routeID ofType:@"routes" onContext:self.coreDataController.managedObjectContext]; 

SPStop *stopObject = (SPStop*)[self.idTransformer objectForOldID:stopID ofType:@"stops" onContext:self.coreDataController.managedObjectContext]; 
[stopObject addSchedulesObject:scheduleObject]; 
[stopObject addRoutesObject:route]; 

[self.coreDataController saveMOC]; 

如果我登錄我的stopObject對象(之前或保存後,同樣的結果),我得到如下:

latitude = "45.50909"; 
longitude = "-73.80914"; 
name = "Roxboro-Pierrefonds"; 
routes =  (
    "0x10480b1b0 <x-coredata://A7B68C47-3F73-4B7E-9971-2B2CC42DB56E/SPRoute/p2>" 
); 
schedules =  (
    "0x104833c60 <x-coredata:///SPSchedule/tB5BCE5DC-1B08-4D11-BCBB-82CD9AC42AFF131>" 
); 

注意路線和時間表對象URL格式有何不同?這一定是有原因的,因爲當我使用sqlite存儲並且打印相同的stopObject時,我的routes集合是空的,但是其中的一個不是schedules

我意識到這是非常少的調試信息,但也許不同的URL格式響個人鈴?我會做錯什麼會導致這種情況?

編輯:似乎一個SPRoute對象只能一次分配給一個SPStop。我在迭代結束時插入了斷點,並且每次看到一個sqlite,我一定會看到,只要SPRoute對象(已經分配給前一個stop.routes)被分配給新的SPStop,前面的stop.routes設置得到清空。怎麼會這樣?

+0

您是否正在對您的路線和時間表訪問器/關係進行任何不尋常的事情,或者它們都是相同的,但具有不同的目標實體? – jrturton 2011-12-27 22:51:16

+0

@jrturton訪問器都是由Xcode生成的默認訪問器。 '日程安排'有一個逆,而'路線'沒有。我嘗試了一下「路線」,但它沒有改變任何東西。 – samvermette 2011-12-27 23:06:18

回答

1

好了,我們已經禁用Xcode的反比關係的警告,其中明確規定:

SPStop.routes沒有逆;這是一種先進的 設置(沒有對象可以在多個目的地的具體 關係)

這正是我們的問題。我們放棄了反向關係,因爲蘋果表示它們只對「數據完整性」有利。我們的商店是隻讀的,所以我們認爲我們並不需要它們。我們現在知道反向關係不僅僅是爲了「數據完整性」:P