2

1 対多の CoreData モデルがあります。タスクリストとタスクリストに属するタスクがあります。私の問題は、新しいタスクを作成するたびに、タスクリストも作成されることです。

「新しいタスクリスト」は、データベースの名前フィールドのデフォルト値です。「新しいタスクリスト」は、新しいタスクリストを作成するときにビューによって保存される値です。ご覧のとおり、タスクが作成されるたびに、デフォルトの名前値を持つタスクリストが自動的に作成されます。

質問 これは本来あるべき姿ですか?もしそうなら、Z_ENT = 1 のタスクリスト名のみを選択するクエリを実行するにはどうすればよいですか (それらは親ですよね?) これが非常に間違っているように見える場合は、どうすれば正しく挿入できますか。テーブルの関係は正しいと思いますが、それが問題になる可能性がある場合は、スクリーンショットを投稿します。

モデル図 ここに画像の説明を入力

マイコード

リストが選択されている場合:

    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 から渡されます。

4

1 に答える 1

1

タスクとタスクリストの間に継承関係を作成したので、すべてのタスクもタスク リストになり、両方のエンティティが同じテーブルに格納されます。これを削除して、次のようにモデルを変更することをお勧めします

これ

まだ作成していない場合は、モデルからマネージド オブジェクト クラスを生成すると、コードは次のようになります。

   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;
于 2012-05-03T11:26:19.403 に答える