2012-04-29 23 views
2

我有一個一對多的CoreData模型。有任務列表和任務屬於任務列表。我的問題是,每當我創建一個新任務時,任務列表也會被創建。查看仿真器中核心數據的內容

「新的任務列表」是在數據庫名稱字段的默認值。 「新任務列表」是View創建新任務時所存儲的值。可以看出,每次創建任務時,都會自動創建一個具有默認名稱值的任務列表。

問題 這是它應該看起來如何?如果是這樣,我該如何做一個查詢來選擇Z_ENT = 1的任務列表名稱(這些是父母,對吧?) 如果這看起來很不對,我該如何正確插入東西。我認爲我的桌子關係是正確的 - 但如果這可能是問題,我會張貼截圖。

模型圖 enter image description here

我的代碼

當選擇了一個清單:

NSManagedObject *managedObject = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    TaskViewController *taskViewController = [[TaskViewController alloc] init]; 
    taskViewController.managedObjectContext = [self.fetchedResultsController managedObjectContext]; 
    taskViewController.tasklist = managedObject; 

在TaskViewController,我得到的fetchedResultsController這樣的:

NSPredicate *predicate = [NSPredicate predicateWithFormat: 
           @"(tasklistOfTask == %@)", tasklist]; 
    [fetchRequest setPredicate: predicate]; 
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"]; 
aFetchedResultsController.delegate = self; 
self.fetchedResultsController = aFetchedResultsController; 

,然後插入,

NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext]; 
    NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity]; 
    NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context]; 

    [newManagedObject setValue:@"dummy" forKey:@"task"]; 
    [newManagedObject setValue:tasklist forKey:@"tasklistOfTask"]; 

的managedobjectcontext從AppDelegate中傳遞英寸

+0

你能告訴我你的模型圖的截圖,知道你是如何連接關係的嗎? – 2012-04-29 17:13:54

+0

添加了模型圖。謝謝! – crazyphoton 2012-04-30 03:40:09

+1

看圖,底部的箭頭看起來是正確的,一對多。它上面的箭頭看起來可疑和可能的罪魁禍首 - 雖然我從來沒有見過它,並可能使用舊版本的Xcode。你們的關係是建立在彼此的反面還是彼此的目的地之間?逆向是非常需要的。 – Wienke 2012-04-30 05:17:26

回答

1

您已經在任務和任務列表之間創建了繼承關係,因此每個任務也是一個任務列表,並且兩個實體都存儲在同一個表中。我建議刪除這一點,改變模型的,所以它看起來像

this

生成模型中的管理對象類,如果你沒有準備好,然後你的代碼將是這樣的:

  NSManagedObject *managedObject = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    TaskViewController *taskViewController = [[TaskViewController alloc] init]; 
    taskViewController.managedObjectContext = [self.fetchedResultsController managedObjectContext]; 
    taskViewController.tasklist = managedObject; 

    NSPredicate *predicate = [NSPredicate predicateWithFormat: 
                              @"(tasklist == %@)", tasklist]; 
    [fetchRequest setPredicate: predicate]; 
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"]; 
aFetchedResultsController.delegate = self; 
self.fetchedResultsController = aFetchedResultsController; 

   NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext]; 
    NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity]; 
    Task *newTask = (Task *)[NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context]; 
    newTask.taskName = @"dummy"; 
    newTask.number = [NSNumber numberWithInteger:[tasklist.tasks count] + 1]; 
    newTask.tasklist = tasklist; 
+0

謝謝!那解決了這個問題。我沒有創建我的對象類。它使生活更簡單。謝謝你的提示! – crazyphoton 2012-05-03 14:55:03