0

一部のコア データを更新しようとしています。データは実際には「どこか」で更新されていますが、データベースを保存/更新していません。

- (IBAction)Update:(id)sender {


    NSEntityDescription *entityDesc =
    [NSEntityDescription entityForName:@"Preferences"
                inManagedObjectContext:context];

    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:entityDesc];


    NSError *error;
    NSArray *objects = [context executeFetchRequest:request
                                              error:&error];

    if ([objects count] == 0) {
        // No update, didnt find any entries.

    } else {

        for (NSManagedObject *obj in objects) {           

            [obj setValue:_salesPrice.text forKey:@"value"];
            if(![context save:&error]){
                NSLog(@"Saving changes failed: %@", error);
            }

        }

    }
    //[context save:&error];
}

コメントエリアで試し[context save:&error];ましたが、まだ保存されていません。また、保存時にエラーは発生しません。

4

1 に答える 1

0

使用するのは1つだけNSManagedObjectContextですか?命名規則は理想的ではありません。通常、1つのオブジェクトであるため、エンティティにPreferenceという名前を付けます。次のコードを試してください。

CoreDataAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
// This is for completion. Usually you should not get the context from the App Delegate.   
// Its better to pass it from the App Delegate to 
// the initial view controller via a property (dependency injection).

NSFetchRequest *req = [[NSFetchRequest alloc] initWithEntityName:NSStringFromClass([Preferences class])];
    NSError *error = nil;
    NSArray *preferences = [context executeFetchRequest:req error:&error];

// Check error

if ([preferences count] == 0) {
    // No update, didnt find any entries.
} else {
    for (Preferences *preference in preferences) {           
        [preference setValue:_salesPrice.text forKey:@"value"];
    }
}
[context save:&error];
// Check error
于 2013-01-04T18:04:28.697 に答える