63

新しいオブジェクトを挿入するときは、次のコードを使用します。

NSManagedObjectContext *context = [appDelegate managedObjectContext];

Favorits *favorits = [NSEntityDescription insertNewObjectForEntityForName:@"Favorits" inManagedObjectContext:context];

favorits.title = @"Some title";

NSError *error;                    
if (![context save:&error]) {
    NSLog(@"Whoops");
}

コア データ内の既存のオブジェクトを更新するにはどうすればよいですか?

4

5 に答える 5

133

更新は、新しいものを作成するのと同じくらい簡単です。

特定のオブジェクトを更新するには、NSFetchRequest. このクラスは、SQL 言語の SELECT ステートメントに相当します。

簡単な例を次に示します。

NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Favorits" inManagedObjectContext:moc]];

NSError *error = nil;
NSArray *results = [moc executeFetchRequest:request error:&error];

// error handling code

配列resultsには、sqlite ファイル内に含まれるすべての管理対象オブジェクトが含まれます。特定のオブジェクト (または複数のオブジェクト) を取得する場合は、その要求で述語を使用する必要があります。例えば:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title == %@", @"Some Title"];
[request setPredicate:predicate]; 

この場合results、 title が と等しいオブジェクトが含まれますSome Title。述語を設定することは、SQL ステートメントに WHERE 句を入れることと同じです。

詳細については、Core Data プログラミング ガイドとNSFecthRequestクラス リファレンスを読むことをお勧めします。

それが役に立てば幸い。

EDIT (更新に使用できるスニペット)

// maybe some check before, to be sure results is not empty
Favorits* favoritsGrabbed = [results objectAtIndex:0];    
favoritsGrabbed.title = @"My Title";

// save here the context

NSManagedObjectまたはサブクラスを使用していない場合。

// maybe some check before, to be sure results is not empty
NSManagedObject* favoritsGrabbed = [results objectAtIndex:0];
[favoritsGrabbed setValue:@"My title" forKey:@"title"];

// save here the context

どちらの場合もsave、コンテキストで a を実行すると、データが更新されます。

于 2012-05-13T13:28:32.730 に答える
11

コンテキストからオブジェクトを取得し、必要なプロパティを変更してから、例のようにコンテキストを保存する必要があります。

于 2012-05-13T13:16:56.177 に答える
7

これがあなたを助けることを願っています。それは私のために働くので。

 NSMutableArray *results = [[NSMutableArray alloc]init];
int flag=0;
NSPredicate *pred;
if (self.txtCourseNo.text.length > 0) {
    pred =  [NSPredicate predicateWithFormat:@"courseno CONTAINS[cd] %@", self.txtCourseNo.text];
    flag=1;
} else {
    flag=0;
    NSLog(@"Enter Corect Course number");
}

if (flag == 1) {

    NSLog(@"predicate: %@",pred);
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]initWithEntityName:@"Course"];
    [fetchRequest setPredicate:pred];
    results = [[self.context executeFetchRequest:fetchRequest error:nil] mutableCopy];


    if (results.count > 0) {
        NSManagedObject* favoritsGrabbed = [results objectAtIndex:0];
        [favoritsGrabbed setValue:self.txtCourseName.text forKey:@"coursename"];
        [self.context save:nil];
        [self showData];
    } else {
        NSLog(@"Enter Corect Course number");
    }



}
于 2015-07-25T06:28:42.320 に答える