2015-04-06 98 views
0

我试图更新存储核心数据实体内的布尔,它只是似乎没有不管我怎么努力更新。下面是我使用的方法:核心数据实体未更新

+ (void) updateTimeFormatPreferenceForUserWithNumber:(NSString *)number withBool:(BOOL)preference WithContext:(NSManagedObjectContext *)context { 

    NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init]; 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"mobileNumber == %@", number]; 

    [fetchRequest setPredicate:predicate]; 
    [fetchRequest setEntity:[NSEntityDescription entityForName:@"User" inManagedObjectContext:context]]; 
    [fetchRequest setIncludesPropertyValues:YES]; 

    NSError *error = nil; 
    NSArray *result = [context executeFetchRequest:fetchRequest error:&error]; 

    if ([result count] > 0){ 

     User *user = [result objectAtIndex:0]; 
     [user setTwentyFourHourTime:[NSNumber numberWithBool:preference]]; 

     if (![context save:&error]) { 
      NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]); 
     } else { 

      BOOL twentyFourHour = [[CoreDataUtils getUserWithNumber:number WithContext:context] twentyFourHourTime]; 

      NSLog(@"Saved Preference %s", preference ? "True" : "False"); 
      NSLog(@"From user object: %@", [user twentyFourHourTime]); 
      NSLog(@"Twenty Four Hour Time is: %s", twentyFourHour ? "true" : "false"); 
     } 
    } 
} 

调用此方法与偏好属性的真假两具有以下的输出:

Saved Preference False 
From user object: 0 
Twenty Four Hour Time is: true 
Saved Preference True 
From user object: 1 
Twenty Four Hour Time is: true 
Saved Preference False 
From user object: 0 
Twenty Four Hour Time is: true 
Saved Preference True 
From user object: 1 
Twenty Four Hour Time is: true 

的twentyForHour布尔从来没有改变其驾驶我疯狂,为什么不更新?

的getUserWithNumber方法是:

+ (User *) getUserWithNumber:(NSString *)number WithContext:(NSManagedObjectContext *)context { 

    NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init]; 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"mobileNumber == %@", number]; 

    [fetchRequest setPredicate:predicate]; 
    [fetchRequest setEntity:[NSEntityDescription entityForName:@"User" inManagedObjectContext:context]]; 
    [fetchRequest setIncludesPropertyValues:YES]; 

    NSError *error = nil; 
    NSArray *result = [context executeFetchRequest:fetchRequest error:&error]; 

    if ([result count] > 0){ 
     return [result objectAtIndex:0]; 
    } else { 
     return nil; 
    } 
} 

三江源

回答

2

此行

BOOL twentyFourHour = [[CoreDataUtils getUserWithNumber:number WithContext:context] twentyFourHourTime]; 

不正确,因为您要保存NSNumber实例为BOOL变量,所以你真的测试是否设置了数字而不是bool的值。更改为

BOOL twentyFourHour = [[[CoreDataUtils getUserWithNumber:number WithContext:context] twentyFourHourTime] boolValue]; 
+0

你绝对的传说,谢谢。 – 2015-04-06 09:49:13