2013-10-15 111 views
0

我有一個簡單的待辦事項列表應用程序。它使用動態生成的文本字段間隔編程爲任務(我沒有使用UITableView由於一些自定義動畫和我想用什麼)。在沒有UITableView的應用程序中使用核心數據

在應用程序中,用戶可以創建多個列表(家庭,工作,學校等),每個列表都有自己的任務。

我想使用核心數據存儲信息

保存的信息是足夠簡單,但在那裏我卡住更新我的核心數據對象(列表和任務)的。另外,Core Data如何將特定任務與特定列表相關聯。

My Data Model

讓我知道如果我需要澄清什麼。

回答

0

我不完全清楚你的問題,但是,更新託管對象的任務很簡單。當你做一個初步的add(類似於「插」在SQL),你可能會使用這樣的代碼:

NSManagedObject *obj; 
obj = [NSEntityDescription insertNewObjectForEntityForName:@"UserData" inManagedObjectContext:context]; 
[obj setValue:user forKey:@"userName"]; 
[obj setValue:goalCategory forKey:@"goalCategory"]; 
[obj setValue:goalDetail forKey:@"goalDetail"]; 
NSError __autoreleasing error; 
[context save:&error]; 

這就是它插入一個新的項目。爲了在找到正在處理的託管對象後進行更新,只需更改託管對象中的值並使用[上下文保存:&錯誤]。這裏有一個例子:

UserData *uData = (UserData *) managedObj; 
uData.itemName = nameText; 
NSError __autoreleasing *error; 
[context save:&error]; 

這就是它。

至於更新,一旦你已選擇要更新的對象(一個或多個),它們被包含在

fetchedResultsController.fetchedObjects 

這是一個NSArray。所以,你可能做這樣的事情:

UserData *uData = (UserData *) [fetchedResultsController.fetchedObjects objectAtIndex:3]; 
uData.completed = YES; 
NSError __autoreleasing *error; 
[context save:&error]; 

所以,這將更新字段中的UserData的實體完成,以便== YES爲對象的fetchedObjects數組中的索引3。

我知道有更新的其他方法和很多的選擇,但我還沒有發現任何需要他們。 fetchedObjects是一個數組,包含您的提取返回的項目;對其進行更新,鑄每個對象的實體(其被定義爲一個NSManagedObject),進行變化,則上下文保存..

HTH。

+0

我更新了我的問題,以便更清楚。你給我的第一個代碼片段是有道理的。保存我瞭解的信息。這是更新一個特定的對象(在我的情況下,一個任務對象一旦被編輯或標記爲完成),我迷路了。 – LazerLex

+0

查看對響應的修訂。 – RegularExpression

0

你最好打賭是NSFetchedResultsController。您可以完全按照Xcode模板建議的模式使用它(您可以通過創建一個新項目Master-Detail並檢查「用戶核心數據」來查看它)。

可以裝置對象模型與名稱的字符串屬性以及所做等。我還建議時間戳和可能的序列號訂購它NSNumber布爾屬性(實體Task)(我發現NSOrderedSet不可靠)。您的實體List應該與Task有多對多的關係。非常直截了當。

List <---->> Task 

唯一的區別是現在找到合適的對象,因爲你不能使用objectAtIndexPath。您可以使用fetchedResultsController.fetchedObjects中的索引。只要確保您的物體按預期順序排列。

+0

我已經添加了我的數據模型的圖像,以便您可以看到我在做什麼。我已經添加了像你所建議的時間戳,謝謝你。我的問題與你提到的NSFetchedResultsController有關。你能否解釋一下如何使用它? – LazerLex

+0

只需按照第一段中的說明使用該模板開始一個新項目。通讀主視圖控制器以查看獲取的結果控制器如何驅動表視圖中的數據。 – Mundi

+0

我的確看過你上面提到的模板,看起來使用的技術是特定於使用Core Data和UITableViews的。我可以查看的任何資源將幫助我知道如何在不使用tableview的情況下使用Core Data? – LazerLex

0

首先,認爲使用核心數據爲您的項目是一個好主意。如果你的模型簡單明瞭,也許使用plists會更好。 如果你選擇的核心數據,只記得2個規則:

  1. 每個線程擁有獨立NSManagedObjectContext;
  2. 僅在其線程中使用上下文執行操作。

現在不用擔心優化。實現任何更新存儲的方案。確保它的工作。然後你應該嘗試一些其他的更新方法。

+0

我認爲核心數據是最好的方法,因爲我有多個需要存儲的自定義對象,我添加了一個我的數據模型的圖像,以便您可以看到我正在構建什麼樣的結構以及爲什麼我覺得它是必需的使用核心數據。 – LazerLex

相關問題