NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber * myNumber = [f numberFromString:txt2.text];
ctbook.number=myNumber;
在上面的ctbook.number的代码参数是NSNumber,所以我在传递给ctbook.number之前将文本字段值转换为NSNumber。但是当我从ctbook.number中检索值时,我得到了一个新的不同的数字,而不是我通过文本字段的数字。我错过了什么?这段代码出了什么问题?
答案 0 :(得分:1)
如果没有其他信息很难说明问题是什么,但如果您需要快速而肮脏的东西,可以使用intValue
的{{1}}或integerValue
方法。
NSString
(ctbook.number = @(txt2.txt.intValue);
语法只是@(x)
)
请注意,如果您的字符串不是有效[NSNumber numberWithInt:txt2.txt.intValue]
,则int
来电将返回intValue
。
修改强>
鉴于最近的评论,问题不在于转换,而在于整数表示。
32位不足以表示您的号码,因此您最好使用较小的数字或使用0
切换到64位表示。
答案 1 :(得分:1)
如果使用“Integer 32”作为Core Data属性的数据类型,则Core Data将(静默地)将值截断为32位。如果您指定的NSNumber
值大于。{1}}
2^31 - 1 = 2147483647
,然后它将被截断为32位,这解释了为什么在读取数据时获得不同的值。
您可以选择“整数64”作为核心数据实体中的数据类型,这将允许最大值2^63 - 1 = 9223372036854775807
。