1

我对变量值有一个奇怪的问题。这是代码(它是类方法的一部分):

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显示值为= 13760640。appData 的cards属性是一个NSArray,它显然没有一千万+个项目,所以我得到一个越界错误。我尝试铸造(int)cardIndex没有更好的结果。奇怪的是,其他一些类中的类似代码可以正常工作。

这是我想在整个应用程序中使用的一些数据,所以我有一个模型类,它在 AppDelegate 中被初始化,theData然后被不同的 ViewControllers 访问。在成功访问某个其他 ViewController(该 ViewController 也保留/释放)后,会出现此错误。

任何帮助将不胜感激。

4

1 回答 1

0

用于[cardIndex unsignedIntValue]线objectAtIndex:

你不能给出objectAtIndex:一个指针,因为它需要一个无符号整数。

例如:

NSDictionary *currentCard = [[NSDictionary alloc] initWithDictionary:[appData.cards objectAtIndex:[cardIndex unsignedIntValue]]];

编辑:

这听起来像是cardIndex一个int但在某个地方,它被设置为一个NSNumber实例。作为一个黑客,使用[(id)cardIndex unsignedIntValue]. 如果这有效,那么这意味着您使用了错误的类型cardIndex(它应该是 NSNumber,而不是int)。

于 2009-08-25T02:09:22.067 回答