【发布时间】:2013-03-01 10:04:53
【问题描述】:
我正在创建一个随机数并将其存储在 NSNumber 对象中,如下所示:
NSNumber *index = [NSNumber numberWithUnsignedInt:arc4random_uniform(2^32-1)];
我也试过了:
NSNumber *index = [NSNumber numberWithUnsignedInt:arc4random_uniform(4294967295)];
NSNumber *index = @(arc4random_uniform(4294967295));
有时我也会像这样分配数字 1:
NSNumber *index = @(1);
这应该只给我正数。
稍后,我会像这样打印出这些数字:
NSString *string = [NSString stringWithFormat:@"%@", index];
这给了我一些随机数的负值,并且 1 被打印为 1。所以我可能会这样做:
NSString *string = [NSString stringWithFormat:@"%u", index.unsignedIntValue];
我只会得到正数 - 我会 - 但现在 1 也突然被打印为一些大的正数。
这里发生了什么?如何在 NSNmber 中正确存储 u_int32(arc4random 返回的)并确保它们只是正数?
【问题讨论】:
-
我应该补充一点,我使用 NSNumber 来存储索引值的原因是它在 NSManagedObject 实体中使用。该实体的属性设置为“Integer 32”(数据模型中没有可用的 Unsigned Integer 32)。
-
你如何打印你从上一个 sn-p 得到的字符串?为
(@1)获取一个大的正数没有任何意义。可能是您在打印字符串时没有使用正确的格式说明符 (%@)? -
顺便说一句,请注意,无符号 32 位整数可以包含比有符号整数更大的值(但不确定这是否对 Core Data 有任何影响)。
-
我实际上将索引号分配给这样的 uitextlabel: textlabel.text = [NSString stringWithFormat:@"%@", index];或 textlabel.text = [NSString stringWithFormat:@"%u", index.unsignedIntValue];
标签: objective-c nsnumber arc4random