2011-04-25 192 views
0

是否有類似於insertNewObjectForEntityName的方法來編輯當前在託管對象上下文中傳遞的實體?我不想創建另一個重複的實體。編輯核心數據中的實體

此外,我不希望用戶能夠輸入具有相同屬性(一個屬性,事件標題)的兩個實體。我怎樣才能做到這一點,當他們嘗試添加一個具有相同標題屬性的新實體時,會彈出警告消息?

回答

1

你的第一個問題聽起來像你想要做的就是獲取一個已經存在於上下文中的獲取請求的對象,改變對象的一些值,然後在你的上下文中調用-save方法。

對於第二部分,當用戶嘗試添加項目時,如果項目存在,則搜索具有相同標題的對象的上下文,然後彈出警報。


編輯:這裏是我的應用程序的一些代碼(編輯了一下)我在其中設置和執行爲獲取請求:

NSFetchRequest *categoryRequest = [[NSFetchRequest alloc] init]; 
[categoryRequest setEntity:[NSEntityDescription entityForName:@"Category" inManagedObjectContext:[self managedObjectContext]]]; 
NSString *categoryName = @"Cooking"; 
NSPredicate *categoryNameMatchesPredicate = [NSPredicate predicateWithFormat:@"name MATCHES %@", categoryName]; 
[categoryRequest setPredicate:categoryNameMatchesPredicate]; 
NSError *error = nil; 
NSArray *categoryArray = [[self managedObjectContext] executeFetchRequest:categoryRequest error:&error]; 

這個請求後,數組categoryArray包含所有名稱爲「Cooking」的類別實體。如果沒有名稱爲「烹飪」的實體,則該數組將爲空。

在實際執行提取請求之前,使用-countForFetchRequest:error:並檢查非零計數的速度可能會更快,但我不確定它在小型iOS應用程序中的重要性。

+0

這正是我想要在這兩種情況下做的。搜索上下文是否與獲取請求相同?我似乎無法執行正確的提取請求,您是否有示例代碼?在我看來,知道第1部分或第2部分可以解決我的問題,對嗎? – Eric 2011-04-25 02:58:51

+0

好吧,我使用提取請求示例編輯了答案。 – 2011-04-25 04:10:09

+0

謝謝西蒙,我會調整這一點,如果需要回來的問題。 – Eric 2011-04-25 12:52:42