2014-03-18 145 views
0

預構建的數據我是在主要由缺乏經驗驅動,非常常見的情況......核心數據,iCloud中並與iOS 7

我的應用程序在第一次發射插入在DB預建的數據。 我只是在設備中檢查數據庫是否存在...如果它不存在,這是第一次啓動,所以我在數據庫創建後添加我的預建數據。

在開發的最後,我決定激活iCloud,哇!只是一行代碼,使其工作...我試過它在不同的設備上,我的預建數據顯然是重複:(

我明白,更好的方式來管理預建數據是與更多而不是一個持久性存儲,爲預先構建的數據創建只讀存儲(我的預建數據不需要由用戶修改,因此只讀解決方案可以)

問題是我有用戶插入的數據之間的關係,所以我不能在多個持久性存儲(核心數據不支持不同存儲之間的關係)工作

我看看Fetched屬性,但它似乎需要一個超劇烈編輯我的代碼。

我認爲去重複數據...所以只是刪除已經在數據庫中的數據,我懷疑這個過程是非常危險的關係,我該如何刪除只是一個重複的對象在第一次啓動時創建的「原始」?=

鑑於我的預生成數據不能被用戶修改或刪除,您認爲這是糾正此問題的最佳方法嗎?

//編輯:有關模型的一些信息:

用戶正在處理(添加/編輯/修改)的實體代表的任務。 這個實體有一個名字和一個CATEGORY。

CATEGORY是我預先構建的實體。

因此,用戶爲該任務添加一個名稱,並從預建數據中選擇一個CATEGORY。

+0

而不是檢查數據庫的存在,您可以檢查是否存在預建數據? –

+0

@David問題是數據將來會被iCloud插入。我錯了嗎? – MatterGoal

+0

...我無法驗證iCloud添加了哪些數據。 – MatterGoal

回答

1

在您的Category實體中,在PrebuiltData模型中,創建一個「id」屬性(並確保此版本在版本之間是一致的)。此模型不應由iCloud管理。

在您的Task實體中,在UserData模型中,創建一個「categoryId」屬性。這種模式應該通過iCloud的管理(或這個討論是沒有意義的)

現在你可以創建你的分類實體的方法使用,以獲取在類別中的所有任務:

-(NSArray*)tasks 
{ 
    NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"Task"]; 
    request.predicate = [NSPredicate predicateWithFormat:@"id = %@", self.id]; 
    return [gTaskManagedObjectContext executeFetchRequest:request error:NULL]; 
} 

同樣,您可以創建您的任務實體獲取類別的方法:

-(Category*)category 
{ 
    NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"Category"]; 
    request.predicate = [NSPredicate predicateWithFormat:@"id = %@", self.categoryId]; 
    NSArray*  results = [gTaskManagedObjectContext executeFetchRequest:request error:NULL]; 

    return results.count > 0 ? results[0] : nil; 
} 
+0

使CATEGORY模型不能被iCloud管理,你的意思是將它添加到不同的持久存儲中?我怎樣才能決定它應該由iCloud管理呢? – MatterGoal

+0

是的,你會有兩個模型,兩個持久性商店等。 –

+0

這似乎是唯一的方法! – MatterGoal