2010-11-24 74 views
0

我完全是新的Mac OS和iPhone,我在写一些小应用程序。 我在资源中有恒定数量的图像名称,我想在这些项目之间切换。我想通过数组中的名称来显示图像(如下所示)。Xcode Objective-C NSArray项目 - 错误或应用程序关闭

但是,从数组中的某个索引获取图像名称字符串似乎会导致3个不同的错误取决于..以及我不知道什么。每次我开始使用新的模拟器的应用程序,它会导致3错误之一。

在线资料只显示1)使数组2)添加项目3)使用objectAtIndex,但它不适用于我这里。无法将字符串从NSArray分配给Array。

在头文件,内部@interface:

NSMutableArray *imgList; 

在代码:

imgList = [NSMutableArray arrayWithObjects:@"image01.jpg", @"image02.jpg", @"image03.jpg", nil]; 
NSString *item; 
item = [imgList objectAtIndex:1]; 
label.text = item 

程序随机具有用于此3个不同的结果:

  • 一旦控制台显示没有问题,但在几个函数调用app关闭之后
  • 其他ti我label.text显示 “ca.lproj” - 不知道为什么,这不是阵列的一部分
  • 其他时间它的控制台错误:

2010-11-24 11:43:15.627效用[410:207 ] - [NSCFString objectAtIndex:]:无法识别的选择器发送到实例0x5f44ba0 2010-11-24 11:43:15.630实用程序[410:207] **由于未捕获的异常'NSInvalidArgumentException',原因:' - [NSCFString objectAtIndex :]:无法识别的选择发送到实例0x5f44ba0' *调用堆栈在第一掷: ( ... ) 结束之后调用抛出'NSException'的实例

回答

0

没有看到更多的代码是一件很难说的事情,但它看起来好像你忘记了保留你的数组。一旦autoreleasepool滴答,你会失去阵列,并且imgList变成一个悬挂指针;并且数组保存的内存被一个字符串覆盖。

[arrayWithObjects:]更改为[[alloc] initWithObjects:]应该解决您的问题;应该增加一个retain;但是如果您使用适当的分配方法,通常会更清楚您正在做什么。

+0

谢谢,保留解决了问题。我确信我之前尝试过,猜测我错了。 – yosh 2010-11-24 11:36:34