我正在尝试使用下面的代码将字符串值转换为NSNumber,该代码存储在CoreData数据库中:
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSLog(@"OrigLoc: '%@', OrigLat '%@'", [item objectForKey: @"origLocHorizontal"], [item objectForKey: @"originLatitude"]);
[tour setOriginLatitude: [f numberFromString:[item objectForKey: @"originLatitude"]]];
[tour setOriginLongitude: [f numberFromString:[item objectForKey: @"originLongitude"]]];
[tour setOrigLocHorizontal: [f numberFromString:[item objectForKey: @"origLocHorizontal"]]];
[tour setOrigLocVertical: [f numberFromString:[item objectForKey: @"origLocVertical"]]];
NSLog的结果是:“OrigLoc:'206.195',OrigLat '41 .824989318847656'”
'tour'的iPhone 6上的转储给出:'origLocHorizontal =“206.195”;' iPhone 5上的转储给出:origLocHorizontal = 206195;
(注意“xxx”的差异)
这适用于CoreData中的'double'字段,但不适用于'float'。值25.5存储为25500。这似乎发生在非64位iOS设备上,尽管这可能只是真正问题的巧合。
有人建议这个问题可能导致什么?
答案 0 :(得分:0)
问题不在于NSNumberFormatter,它在代码的其他地方。
打破不能处理多个语句并找到问题的陈述。首先获取NSString,然后转换为NSNumber,然后设置为tour。在每个陈述后记录。
NSNumberFormatter *numberFormatter = [NSNumberFormatter new];
NSString *numberAsString = [item objectForKey: @"originLatitude"];
NSLog(@"numberAsString: %@", numberAsString);
NSNumber *number = [numberFormatter numberFromString:numberAsString];
或
NSNumber *number = @[numberAsString:doubleValue]);
NSLog(@"number: %@", number);
[tour setOriginLatitude: number];
// NSLog from Core Data
注意:你真的不需要设置setNumberStyle:NSNumberFormatterDecimalStyle,可能不应该。