我对变量值有一个奇怪的问题。这是代码(它是类方法的一部分):
MyAppDelegate *pDelegate = [[UIApplication sharedApplication] delegate];
SomeDictionaryData *appData = [pDelegate.theData retain];
NSLog(@"my instance var: %@",cardIndex); // outputs "my instance var: 4"
NSDictionary *currentCard = [[NSDictionary alloc] initWithDictionary:[appData.cards objectAtIndex:cardIndex]];;
// the above line breaks the app
[currentCard release];
[appData release];
我将调试器与
objc_exception_throw
断点一起使用。那里的objectAtIndex
接收到的输入显示为value =13760640。appData的cards
属性是一个NSArray
,它显然没有一千万+个项目,因此出现了出界错误。我尝试使用(int)cardIndex
进行铸造,但没有更好的结果。奇怪的是,其他一些类中的类似代码也可以正常工作。这是我要在整个应用程序中使用的一些数据,因此我有一个Model类,该类在AppDelegate中初始化为
theData
,然后由其他ViewController访问。在其他ViewController上进行一次成功访问后,也会显示此错误(该访问也确实会保留/释放)。任何帮助将不胜感激。
最佳答案
在[cardIndex unsignedIntValue]
行中使用objectAtIndex:
。
您不能给objectAtIndex:
一个指针,因为它需要一个无符号整数。
例如:
NSDictionary *currentCard = [[NSDictionary alloc] initWithDictionary:[appData.cards objectAtIndex:[cardIndex unsignedIntValue]]];
编辑:
听起来
cardIndex
是一个int
,但是在某些地方,它被设置为NSNumber
实例。作为一种技巧,请使用[(id)cardIndex unsignedIntValue]
。如果这可行,则表明您为cardIndex
使用了错误的类型(应为NSNumber,而不是int
)。