2

アプリケーションのストレージに Core Data を使用しています。アプリケーション内で、「エンティティ」が変更される場合があります (住所、都市、役職など)。

エンティティの特定の属性を更新するのではなく、ストレージ内の既存のエンティティを同じエンティティの新しいバージョンに置き換えるメソッドを作成することで、プロセスを簡素化したいと思います (空想は何もありません)。私の方法では、必要なエンティティを取得する必要があると考えていますが、実際にどのように置換を行うのでしょうか? これは私が混乱しているところです。

これが私の関連コードです:

    -(void)updateUser:(User *)user {

        // Create fetch request
        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        NSEntityDescription *entity = [NSEntityDescription entityForName:@"User" inManagedObjectContext:_managedObjectContext];
        [fetchRequest setEntity:entity];

        // Create predicate
        NSPredicate *pred = [NSPredicate predicateWithFormat:@"userid == %@", user.userid];
        [fetchRequest setPredicate:pred];

        // Create fetched results controller
        NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:_managedObjectContext sectionNameKeyPath:nil cacheName:nil]; 
        self.fetchedResultsController = theFetchedResultsController;
        _fetchedResultsController.delegate = (id)self;

        //what do I do next? 

        NSError *error;

        if (![_managedObjectContext save:&error]) {

            NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);

        }

   }

私が言ったように、既存のエンティティを新しいものに置き換えたいだけです。どうすればいいですか?

4

1 に答える 1

1

オブジェクトの置換が属性の変更よりも簡単だとは思いません。

しかし、やりたいことをするには、次のようなコードが必要です。

// I don't know the class for YourEntity, 
NSError *error = nil;
NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (error) {
    // handle fetch error
} else {
    NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"User" inManagedObjectContext:_managedObjectContext];
    YourEntity *newEntity = [[YourEntity alloc] initWithEntityDescription:entityDescription insertIntoManagedObjectContext:_managedObjectContext];
    // change settings on 'newEntity'

    for (YourEntity *recordToDelete in results) {
        [_managedObjectContext deleteItem:recordToDelete];
    }
    [_managedObjectContext save:&error];
    if (error) {
        // handle save error
    }
}
于 2013-09-21T01:58:04.517 に答える