将NSString转换为NSNumber

时间:2014-10-27 13:53:08

标签: ios objective-c core-data

我正在尝试使用下面的代码将字符串值转换为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上的转储给出:'origLocHorizo​​ntal =“206.195”;' iPhone 5上的转储给出:origLocHorizo​​ntal = 206195;

(注意“xxx”的差异)

这适用于CoreData中的'double'字段,但不适用于'float'。值25.5存储为25500。这似乎发生在非64位iOS设备上,尽管这可能只是真正问题的巧合。

有人建议这个问题可能导致什么?

1 个答案:

答案 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,可能不应该。