9

重複の可能性:
保存しますが、NSManagedObjectをCoreDataに保存しませんか?

保存せずにNSManagedObjectを作成する必要がありますが、どうすればよいですか?

これを実行したい理由は、ユーザーが詳細を入力するセットアップがアプリにあるためですが、セットアップが完了した場合にのみオブジェクトを保存したいです(キャンセルするオプションがあります。この場合、オブジェクトは保存せずに破棄したので、すぐに挿入したくありません)。

コンテキストなしで挿入しようとしましたが、アプリがクラッシュします。

私は以下を試しました:

GuestInfo *guest;
guest = (GuestInfo *)[NSEntityDescription insertNewObjectForEntityForName:@"GuestInfo" inManagedObjectContext:nil];

これにより、次のエラーメッセージが表示されてクラッシュが発生します。

'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'GuestInfo''
4

4 に答える 4

14

管理オブジェクトを作成し、通常どおり管理オブジェクト コンテキストに挿入することをお勧めします。管理対象オブジェクトへの参照があります。つまり、次のようになります。

GuestInfo* guest = (GuestInfo *)[NSEntityDescription insertNewObjectForEntityForName:@"GuestInfo" inManagedObjectContext:managedObjectContext];

その後、ユーザーがキャンセルした場合は、次のように管理オブジェクト コンテキストから削除します。

[guest deleteInContext:managedObjectContext];

管理対象オブジェクト コンテキストは、このようにオブジェクトを作成および削除するためのスクラッチパッドとして設計されています。

検討する可能性のある別のオプションは、次の呼び出しです。

[managedObjectContext rollback]

ユーザーがキャンセルした場合。つまり、管理オブジェクト コンテキストで管理オブジェクトを作成しますが、ユーザーがキャンセルすると、管理オブジェクト コンテキストの状態を元に戻すか、最後に保存したときの状態にロールバックします。Apple の「Using Managed Objects」ドキュメントの「元に戻す管理」セクションを参照してください。

https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CoreData/Articles/cdUsingMOs.html

于 2012-04-16T11:49:02.323 に答える
7

通常のコンテキストの子として、NSManagedObjectContext を作成します。必要なすべての変更をそこに加えることができ、保存を呼び出さない限り、そこにあるものはプッシュされません。

例えば...

NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType: NSPrivateQueueConcurrencyType];
moc.parentContext = myCurrentManagedObjectContext;

これで、プログラムの任意のスレッド内から、次の呼び出しを行うことができます...

[moc performBlock:^{
    // Do anything you want to with this context... make a new object, whatever.
    // As long as you do not call [moc save], your changes will not propagate
    // up to the parent context, nor saved.
}];
于 2012-04-15T22:34:29.557 に答える
0

管理対象オブジェクトには常にコンテキストが必要です。オブジェクトを永続化したくない場合は、単にコンテキストを保存しないでください。

オブジェクトを永続化させたくない場合、実際にコア データを使用する必要があるかどうかは疑問です。

于 2012-04-16T01:06:30.297 に答える
-1

保存したくない場合にCoreDataオブジェクトを作成するのは少し奇妙ですが、とにかくエラーは、GuestInfoという名前のモデルファイルがプロジェクトに含まれていないことを示しています。それが存在し、 [バンドルリソースのコピー]セクションに含まれていることを確認します。モデルファイルは、データベース内のタイプとそれらの間の接続を宣言するファイルです。

于 2012-04-15T23:25:43.373 に答える