2012-07-22 61 views
0

编辑:问题的修订,缩小了范围转换的NSNumber为int

我需要使用switch语句直接基于一个NSNumber的int值的结果。我的方法是这样的:

-(BOOL)setImage:(NSNumber*)c{ 
     switch ([c intValue]){...} 
} 

我得到当我运行它

我也曾尝试switch([c integerValue])但是,这并不工作,要么

如果我把交换机上的一个“EXC_BAD_ACCESS”错误switch语句中的一个静态int,程序运行良好。

什么是错的,我怎么能得到我的NSNumber的int值?

+1

如果'activeColors'是'nil'或者是空的,你将获得零师。添加'NSLog(@“%d”,[activeColors count])'来检查。 – dasblinkenlight 2012-07-22 01:36:06

+0

日志输出2,预计 – Cbas 2012-07-22 01:38:52

+0

那么你不能将[activeColors计数]为静态INT然后计算得到随机指数? – TheAmateurProgrammer 2012-07-22 01:41:54

回答

1

如果[c intValue]崩溃然后c不是一个对象的指针。如果它返回一个意外的值,那可能是nil。这是一个好主意,检查,并返回NOnil号码或选择一些默认值。

+0

是啊,我的子类的一个路过的函数int,而不是一个NSNumber – Cbas 2012-07-22 02:49:59

+0

的除非我误解你的评论,这不是完全正确的。发送应该返回一个原始对象为零的消息与发送应该返回对象的消息一样有效。换句话说,将_any_消息发送给nil总是可以的。另一方面,向nil以外的非对象发送消息会崩溃,听起来就像是@ Cbas的问题。 – 2012-07-22 03:25:57

+0

我会编辑这个问题,使其更加清晰一些,但涉及到基本类型时基本上不会有安全的事情发生。如果该方法应该返回一个数据结构,比如'NSRect',那么当调用'nil'对象时,它肯定会*崩溃。如果它是一个原始类型,你可能会得到0(对于一个整数)或者FPU中发生的任何浮点值等,但肯定没有什么明智的。 – 2012-07-22 03:33:19