我最初有我的應用程序安裝程序來將一個行項目存儲在我的核心數據模型中的單個實體中。之後,我決定改變這個設置,讓主uitableview只列出每個項目的名稱,然後當你點擊一個項目時,你可以編輯項目名稱並在uitextview中添加額外的子項目。使用兩個獨立的視圖控制器更新核心數據模型
我有兩個VC。
- 的ViewController
- EditItem
我現在有兩個實體。
項目 - > ITEMNAME
列表 - > LISTNAME
Item
有List
*列表的關係 - 列表 - 項目
List
有Item
*項目的關係 - 項目 - 列表
我有點困惑的是如何去獲取數據t正被存儲在新實體中。如果List
是Item
的孩子,將從List
自動獲取對象Item
?
現在您可以在主VC上輸入一個項目並保存它。如果您然後點擊該項目,您將被帶到一個輔助VC,讓您編輯該項目。
當我在我的主VC中獲取Item
時,我是否也應該從List
獲取對象,然後在我的prepareforsegue
方法內傳遞它們?
這裏的想法是:
- 如果該項目名稱存在,它被單獨留在家中或編輯,應該寫回模型
- 如果沒有todolist的,用戶應加項目添加到列表中,並且點擊
Save
應當在此時更新item
和todo list
。
當前NSFetchedResultsController上的ViewController
-(NSFetchedResultsController *) fetchedResultsController {
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init];
NSManagedObjectContext *context = [self managedObjectContext];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Item" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"itemname" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc]initWithObjects:sortDescriptor, nil];
fetchRequest.sortDescriptors = sortDescriptors;
_fetchedResultsController = [[NSFetchedResultsController alloc]initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];
_fetchedResultsController.delegate = self;
return _fetchedResultsController;
}
當前保存IBAction爲上EditItem
- (IBAction)save:(id)sender {
NSManagedObjectContext *context = [self managedObjectContext];
if (self.editItemField) {
// Update existing device
self.toDoItem.itemname = self.editItemField.text;
}
NSError *error = nil;
// Save the object to persistent store
if (![context save:&error]) {
NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}
[self.navigationController popViewControllerAnimated:YES];
}
編輯
正如您從屏幕截圖中可以看到的,想法是頂部文本字段使用上一個VC的列表標題填充。這工作就像它應該。用戶可以編輯標題或保持原樣。然後他們可以使用第二個文本框將項目添加到該列表。
當我在Edit Item
VC上提交列表項時,新對象保存到我的模型中,但不顯示在UITableView中。從我認爲這應該起作用的方式來看,我認爲我的Edit Item VC應該與我的ViewController VC安裝非常相似。我不應該得到任何東西,因爲在我設置我的上下文時最初是處理的,等等。因爲我的Item
實體和我的List
實體之間存在關係,所有這些信息一起被提取。我在這個假設中糾正了嗎?
當我將一個項目保存到Edit Item
VC上的模型中時,是否在列表項目與其父項目名稱之間自動生成關聯?
任何在這方面正確的方向推動是讚賞。
編輯
我說:
NSError *error = nil;
if (![[self fetchedResultsController] performFetch:&error]) {
NSLog(@"Error: %@", error);
abort();
}
進入我的viewDidLoad方法。這導致數據實際上在EditItem VC的UITableView中填充,但是,無論我在主VC中點擊哪個項目,我都會得到相同的列表。
例子:
- 我創建
Item 1
- 我敲擊
Item 1
然後在EditItem VC創建兩個項目 - 我回到初始VC
- 我創建
Item 2
- I磁帶上
Item 2
- 從
Item 1
顯示爲Item 2