iOS NSArray 在索引处插入对象

Posted

技术标签:

【中文标题】iOS NSArray 在索引处插入对象【英文标题】:iOS NSArray inserting object at an index 【发布时间】:2012-08-02 07:56:14 【问题描述】:

我正在查看正在测试应用的设备的崩溃日志,我看到以下几行...

objc_exception_throw + 33

[__NSArrayM insertObject:atIndex:] +187

发生这种情况的代码如下。 appData 是一个 NSDictionary,我希望 imageUrl 是 Internet 上 png 文件的 URL。

for (int i = 1; i <= [self getNumberOfScreenshots]; i++) 
    pathToUrl = @"screenshot_";
    pathToUrl = [pathToUrl stringByAppendingString:[[NSNumber numberWithInt:i] stringValue]];
    imageUrl = [self.appData valueForKey:pathToUrl];
    imageData = [[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:imageUrl]];
    [NSMutableArrayObj addObject:imageData];

什么会导致这种类型的错误?该错误很少发生..可能是 imageData 有时为零,因为它无法从 url 下载 png 图像,因此当我尝试将其添加到 NSMutableArrayObj 时会引发该异常?

谢谢!

【问题讨论】:

是的,nil 不允许在容器中;如果该值可以是nil,那将是一个问题。您没有说引发了哪个异常;跟踪暗示引发了异常。它可能更准确地描述了错误。 是的,添加更多错误检查并拒绝imageData == nil 的图像。 感谢您的帮助!我将添加错误检查,我猜这是 nil 问题。我无法确切地看到从跟踪的其余部分引发了什么异常......最上面的行是 __exceptionPreprocess + 163 如果您认为它不应该是non-nil,则在分配imageData 之后添加NSAssert(imageData != nil, @"Invalid image!");。然后彻底测试它,你应该看看你的断言是否正确...... 【参考方案1】:

可能有两个原因,因为您没有更具体地描述错误

1) 实际上你没有将内存分配给数组

2) 将 nil 值插入数组。要停止插入 nil,请执行以下操作:

 if(imageData)
 
   [NSMutableArrayObj addObject:imageData];
 

【讨论】:

以上是关于iOS NSArray 在索引处插入对象的主要内容,如果未能解决你的问题,请参考以下文章

如何将一个 NSArray 的两个不同索引处的对象存储到另一个 NSArray 的一个索引

在索引 0 处插入元素,NSManagedObject

ios NSArray 获取 2 个索引之间的所有索引

迭代数组并在索引处插入元素

Jquery在某个索引处将新行插入表中

无法在索引 0 处插入 CAGradientLayer(在 tableView 后面)