2

私のアプリには、すべてのコアデータ オブジェクトを表示するマスター ビュー コントローラーがあります。

ユーザーがオブジェクトを追加すると、これが実行され、次の詳細ビューが開き、新しいオブジェクトの詳細が入力されます。

-(IBAction)addPerson:(id)sender
{
    Person *p = (Person *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:managedObjectContext];
    PersonDetailViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"PersonDetail"];
    vc.managedObjectContext = fetchedResultsController.managedObjectContext;
    vc.person = p;
    vc.isNewPerson = YES;
    [self.navigationController pushViewController:vc animated:YES];
}

詳細ビューに、これを呼び出す削除ボタンがあります。

[managedObjectContext deleteObject:person];
    NSError *err;
    if (![managedObjectContext save:&err])
    {
        // Update to handle the error appropriately.
        NSLog(@"Unresolved error %@, %@", err, [err userInfo]);
        exit(-1);  // Fail
    }

これは、現在、新しい coredata オブジェクトをキャンセルする方法です。しかし、私はそれに問題があります。

新しいオブジェクトの作成をキャンセルするにはどうすればよいですか? 作成して削除しますか、それとも確認するまで作成しませんか? よくわかりません。

4

1 に答える 1

0

確認されるまで、管理対象オブジェクトを実際に作成することはありません!

PersonDetailViewControllerしかし、最初に、エンティティにまったく依存しないように を書き直しPersonます (疎結合)。代わりに、設定/編集したいオブジェクトPersonDetailViewControllerのさまざまな属性のプロパティを定義し、保存デリゲート メソッドなどで管理対象オブジェクトの作成を処理します。このアプローチを使用すると、新しい管理対象オブジェクトなどを作成する必要なく、作成のユースケースを途中でキャンセルすることもできます。PersonPerson

分かりやすく説明すると、デリゲート メソッドは次のようになります。

- (void) personDidSave: (PersonDetailViewController*) controller {
        // Create a new Person object with the values from the controller
        // and add persist it to core data
        Person *p = (Person *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:managedObjectContext];
        p.name = controller.name;
        p.surname= controller.surname; 
        // etc.

        // save to core data

        // Refresh the table or whatever view
    }
于 2012-11-12T13:54:47.387 に答える