当我尝试将一个整数值打印到从NSManagedObject检索到的控制台时,它会显示一个6位或8位数值(对象ID?)。但是,如果我使用调试器'打印描述到控制台'显示为我期望的单个数字值。
例如,我将对象'sequence'分配给NSInteger,然后使用NSLog格式字符串显示:
MyProcess *myProcess = [array objectAtIndex:i];
NSInteger sequence = [[NSNumber numberWithInteger:(NSInteger)myProcess.sequence] intValue];
NSLog(@"sequence = %d",myProcess.sequence);
控制台输出为:
2009-10-06 16:11:05.871 MyProcess[33185:20b] sequence = 565256
但是当我从调试器尝试“打印到控制台”时,我看到值1:
<MyStoryImage: 0x3f59a80> (entity: MyObject; id: 0x3f2d540 <x-coredata://FF21959A- 4B67-4587-A25F-66A7B8139DFA/MyProcess/p2> ; data: {
sequence = 1;
<x-coredata://FF21959A-4B67-4587-A25F-66A7B8139DFA/MyProcess/p1>;
})
感谢您的帮助!
答案 0 :(得分:12)
我认为你从NSManagedObject获得的是一个NSNumber。 打印很容易:
MyProcess *myProcess = [array objectAtIndex:i];
NSLog(@"sequence = %@", myProcess.sequence);
或者,如果你真的需要NSInteger:
MyProcess *myProcess = [array objectAtIndex:i];
NSLog(@"sequence = %i", [myProcess.sequence integerValue]);
我认为在这段代码中
NSInteger sequence = [[NSNumber numberWithInteger:(NSInteger)myProcess.sequence] intValue];
(NSInteger)myProcess.sequence实际获取NSNumber的内存地址。您不能只将NSNumber转换为NSInteger。
答案 1 :(得分:1)
听起来myProcess.sequence
是NSNumber(对象)而不是NSInteger(标量)。这可以解释为什么它在对象的描述中正确显示,但是当您明确地尝试将其打印为整数时则不能。
答案 2 :(得分:0)
根据应用程序的构建方式,NSInteger可能是32位,也可能是64位。如果它是64位值,则需要执行
NSLog(@"sequence = %qi", sequence)
以便它将sequence
正确地视为64位值。但请注意,这不适用于32位应用程序;据我所知,没有一种格式说明符可以在32位和64位世界中打印NSInteger。
答案 3 :(得分:-1)
NSInteger只是一个int:
typedef int NSInteger;
在第一行代码中:
NSInteger sequence = [[NSNumber numberWithInteger:(NSInteger)sequence] intValue];
你正在做的就是在一个回合的路上为自己分配序列。由于它没有初始化,它可能是任意随机数。
答案 4 :(得分:-1)
试试这个:
NSLog(@"sequence = %li",(unsigned long)myProcess.sequence);