【问题标题】:Xcode Objective-C NSArray item - error or app closeXcode Objective-C NSArray 项目 - 错误或应用程序关闭
【发布时间】:2011-05-15 01:01:39
【问题描述】:

我对 Mac OS 和 iPhone 完全陌生,我正在编写一些小应用程序。 我在资源中有恒定的图像名称数组,我想在这些项目之间切换。我想按数组中的名称显示图像(如下所示)。

但是,从数组中的某个索引获取图像名称字符串似乎会导致 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 种不同的结果:

  • 一旦控制台显示没有问题,但在几次函数调用后应用程序就会关闭
  • 其他时候 label.text 显示“ca.lproj” - 不知道为什么,它不是数组的一部分
  • 其他时候是控制台错误:

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

【问题讨论】:

    标签: objective-c xcode nsarray


    【解决方案1】:

    如果没有看到更多代码,这有点难以分辨,但看起来好像您忘记了保留数组。一旦 autoreleasepool 滴答作响,你就丢失了数组,imgList 变成了一个悬空指针;数组持有的内存被字符串覆盖。

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

    【讨论】:

    • 谢谢,retain解决了问题。我确定我之前尝试过,猜我错了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2022-01-20
    • 2014-09-11
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    相关资源
    最近更新 更多