核心数据实体未更新
Core Data Entity is not updating
我正在尝试更新存储在核心数据实体中的布尔值,但无论我尝试什么,它似乎都没有更新。这是我使用的方法:
+ (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");
}
}
}
使用首选项 属性 作为 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;
}
}
谢谢
这一行
BOOL twentyFourHour = [[CoreDataUtils getUserWithNumber:number WithContext:context] twentyFourHourTime];
是不正确的,因为您将 NSNumber
实例保存到 BOOL
变量中,因此您实际上是在测试数字是否已设置,而不是 bool 的值。改成
BOOL twentyFourHour = [[[CoreDataUtils getUserWithNumber:number WithContext:context] twentyFourHourTime] boolValue];
我正在尝试更新存储在核心数据实体中的布尔值,但无论我尝试什么,它似乎都没有更新。这是我使用的方法:
+ (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");
}
}
}
使用首选项 属性 作为 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;
}
}
谢谢
这一行
BOOL twentyFourHour = [[CoreDataUtils getUserWithNumber:number WithContext:context] twentyFourHourTime];
是不正确的,因为您将 NSNumber
实例保存到 BOOL
变量中,因此您实际上是在测试数字是否已设置,而不是 bool 的值。改成
BOOL twentyFourHour = [[[CoreDataUtils getUserWithNumber:number WithContext:context] twentyFourHourTime] boolValue];