0
 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 检索值时,我得到了一个新的不同数字,这不是我通过文本字段传递的数字。我错过了什么?这段代码有什么问题?

4

2 回答 2

1

没有额外的信息很难判断出了什么问题,但是如果你需要一些快速而肮脏的东西,你intValue可以integerValue使用NSString.

ctbook.number = @(txt2.txt.intValue);

@(x)语法只是 的简写[NSNumber numberWithInt:txt2.txt.intValue]

请注意,如果您的字符串无效intintValue调用将返回0

编辑

鉴于最近的评论,问题不在于转换,而在于整数表示。

32 位不足以表示您的数字,因此您最好使用较小的数字或使用int64_t.

于 2013-04-06T05:46:27.350 回答
1

如果您使用“Integer 32”作为 Core Data 属性的数据类型,那么 Core Data 将(默默地)将该值截断为 32 位。如果您分配的NSNumber值大于 2^31 - 1 = 2147483647,那么它将被截断为 32 位,这解释了为什么在读回数据时会得到不同的值。

您可以在核心数据实体中选择“整数 64”作为数据类型,这将允许最大值为2^63 - 1 = 9223372036854775807.

于 2013-04-06T05:58:26.303 回答