3

3 つの質問ですが、それらはすべて関連しています。必要に応じて、3 つの質問に分けて、より多くの単位を取得できるようにします。そうしたい場合はお知らせください。

NSManagedObject にアクセスできる次のコードがあります

self.managedObjectContext = [(STAppDelegate *)[[UIApplication sharedApplication]  delegate] managedObjectContext];

NSError *error;
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"LetsMeet" inManagedObjectContext:managedObjectContext]];
NSArray *objectArray = [managedObjectContext executeFetchRequest:request error:&error];
if(objectArray.count==0){
    letsMeet = (LetsMeet *) [NSEntityDescription insertNewObjectForEntityForName:@"LetsMeet" inManagedObjectContext:managedObjectContext];
    } else{
    letsMeet = (LetsMeet *)[objectArray objectAtIndex:0];
    }

上記のコードにより、属性を保存および取得できます。つまり、letsMeet.attribute にアクセスして保存および取得できます。

質問 1: 新しい managedObjectContext を削除して開始するにはどうすればよいですか。つまり、ユーザーはシーン間で記入しているフォームを持っています。ユーザーがナビゲーション コントローラーの [次へ] ボタンを押すと、すべてが各シーンから CoreData に保存されます。いくつかの画面を通過した後、ユーザーはフォームをキャンセルしたいと考えています。この時点で、これまでに保存したものをすべて削除したいと思います。コード例をください。

質問 2: ユーザーがフォームの最後に到達し、後で取得するためにフォームを保存することを決定したとします。フォーム全体のコピーを 1 つのオブジェクトとして Core Data に保存するにはどうすればよいですか。コード例をください。

質問 3: 保存されたオブジェクトを後で Core Data から取得し、すべてのユーザーが保存したものを表示するにはどうすればよいですか? コード例をください。

4

1 に答える 1

3
  1. letsMeet削除するには、からオブジェクトを削除するだけですNSManagedObjectContext

    NSError *error;
    [managedObjectContext deleteObject:letsMeet];
    [managedObjectContext save:&error];

オブジェクトは常に 1 つしかないため、参照の取得はletsMeet問題になりません。コードで行ったように行うことができます。
更新: 管理対象オブジェクトのコンテキストを削除する必要はありません。オブジェクトを処理するための単なるスペースです。質問の最後にさらに説明があります。

2.LetsMeetすべてのフォーム要素が の属性になるようにエンティティがモデル化されている場合、コードで行ったようにオブジェクトを作成しLetsMeetた後に を保存すると、これは単一のオブジェクトとして保存されます。managedObjectContextLetsMeet

3.オブジェクトを取得する方法は、コードで行っていることなので、既に知っています。オブジェクトを 1 つしか使用しないため、すべてが簡単になります。一意のオブジェクトを取得するために複数のオブジェクトがある場合は、主キーを実装するか (formID など、別の属性を LetsMeet に追加する) objectId、各オブジェクトの内容を把握してから述語を設定する必要があります。それに応じてリクエストをフェッチします。

NSFetchRequest *request = [[NSFetchRequest alloc]init];
[request setEntity:letsMeet];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"formId like %@", formId];
[request setPredicate:predicate];

NSArray *resultsArray =[managedObjectContext executeFetchRequest:request error:&error];

formId が一意の場合、単一のオブジェクト配列が返されます。

ただし、1 つのオブジェクトのみを処理するためにコアデータを使用している場合は、NSUserDefaultsこれを行うために plist ファイルを使用または書き込むことができます。これは一種のやり過ぎです。

更新: NSManagedObject の objectId を取得するには:

 [letsMeet objectId];

ManagedObjectContext はホワイトボードのようなものです。配列内にあるオブジェクト、管理対象オブジェクト コンテキスト内のオブジェクトはすべて同じです。オブジェクトを変更したり、オブジェクトを追加したり、オブジェクトを削除したりできます。唯一のものは、[managedObjectContext save:]ディスクに書き込まれる、を実行したときのオブジェクトの現在の状態です。

于 2013-02-28T02:37:51.077 に答える