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 在索引处插入对象的主要内容,如果未能解决你的问题,请参考以下文章