1

これまでのところ、アプリの非常に単純なベースがあります。ユーザーが人の名前と名前を入力し、保存ボタンをタップすると、次のコードが実行される2つのテキストフィールドがあります。

person = (Person *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:managedObjectContext];

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

オブジェクトがありPersonます。ユーザーがテキストフィールドに入力するときに名前と名前を設定し、保存を選択するときにオブジェクトを挿入します。ただし、保存後、名前と名前はとして表示され(null)ます。すべてのアウトレットとメソッドが正しく接続されており、名前/オブジェクトを設定して保存するためにすべてのコードが実行されています。

ただし、マスタービューでこれを行うと、次のようになります。

Person *p = (Person *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:managedObjectContext];

PersonDetailViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"PersonDetail"];
    vc.managedObjectContext = fetchedResultsController.managedObjectContext;
    vc.person = p;

そして、オブジェクトを保存します。値はではありません(null)。新しいオブジェクトを作成してから削除するのではなく、保存することを決定した後に新しいオブジェクトを挿入しようとしています。キャンセルすると、よりクリーンで論理的なコードになります。

4

1 に答える 1

0

Personオブジェクトが nil を返していたことが判明しました。

解決策: Personnil コンテキストでオブジェクトを初期化して、nil ではなく挿入されないようにします。このようにして、変数に姓名などを格納することを確認できます。挿入は次のようになります。

person = [[Person alloc] initWithEntity:[NSEntityDescription entityForName:@"Person" inManagedObjectContext:managedObjectContext] insertIntoManagedObjectContext:nil];

Person *p = (Person *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:managedObjectContext];
        p.firstName = person.firstName;
        p.lastName = person.lastName;

これは私がこれに到達するのを助けました: 挿入せずに NSManagedObject をインスタンス化する方法はありますか?

于 2012-11-14T19:58:05.047 に答える