无法将NSNumber转换为int

时间:2010-06-28 00:55:32

标签: objective-c cocoa

对这个愚蠢的问题感到抱歉。我正在尝试学习objc而且我无法在2个int值之间做一个简单的求和...实际上问题出在总和之前。

我有一个对象,其实例变量被定义为NSNumber,并且它被定义为属性,如下所示:

@interface MyObj : NSObject {
   NSNumber *count;
}
@property (readwrite, assign) NSNumber *count;
@end

@implementation MyObj
@synthetize count;
@end

然后我有一个将消耗MyObj的课程:

- (void)total:(MyObj *)mobj {
   int count = [mobj.count intValue];

   NSLog(@"%@", mobj.count);
   NSLog(@"%@", count);

   int total = 10 + count;
   NSLog(@"%@", total);
}

第一个NSLog很好地打印了mobj.count(比方说5),但是第二个NSLog会抛出 EXC_BAD_ACCESS 。当然,该计划永远不会达到总和。

那么,我做错了什么?我正在尝试根据此post将其转换为int。

TIA,

鲍勃

5 个答案:

答案 0 :(得分:11)

说明符%@用于打印Obj-C对象,它要求对象的-description。代码中的countint。对%i使用int。查看NSLog() Specifiers

答案 1 :(得分:2)

另一个可能的问题:

@property (readwrite, assign) NSNumber *count;

你很可能想要使用retain,所以它不会从你身下消失(根据经验:对原始类型使用assign,保留对象)

@property (readwrite, retain) NSNumber *count;

答案 2 :(得分:1)

NSLog(@"%@", count);

应该是:

NSLog(@"%i", count);

因为它是一个int,而不是一个对象。

另见

NSLog(@"%@", total);

因为它也不是一个对象而是一个int

答案 3 :(得分:0)

int count = [mobj.count intValue];

应该是

count = [NSNumber numberWithInt:[mobj.count intValue]];

当你试图将它设置为int时,它会显示自己,count是一个NSNumber。

答案 4 :(得分:0)

在你的NSLog尝试

NSLog(@"%@", [count stringValue]);