对这个愚蠢的问题感到抱歉。我正在尝试学习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,
鲍勃
答案 0 :(得分:11)
说明符%@
用于打印Obj-C对象,它要求对象的-description
。代码中的count
是int
。对%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(@"%@", [count stringValue]);