我是iOS编程的爱好者。编程时我总是遇到同样的问题。 我认为我不了解内存管理问题。 这是我的实际项目:
h文件: 包含NSStrings的NSMutableArray
NSMutableArray *pictureStrings;
@property (nonatomic,retain) NSMutableArray *pictureStrings;
m-File中的:
@synthesize pictureStrings;
并在viewDidLoad方法
中pictureStrings = [[NSMutableArray alloc] init];
dealloc方法中的
[pictureStrings release];
好。我正在使用异步URL请求获取许多字符串,并在connectionDidFinishLoading Delegate方法中将值存储到pictureStrings
[pictureStrings addObject:aString];
BUT 当我在cellForRowAtIndexPath方法中读取值时,如
if (pictureStrings != nil) {
cell.textLabel.text = [NSString stringWithFormat:@"%@", [pictureStrings objectAtIndex:indexPath.row]];
}
我的应用程序崩溃了消息:
*由于未捕获的异常'NSRangeException'而终止应用程序,原因:'* - [NSMutableArray objectAtIndex:]:索引0超出空数组的界限'
我的错在哪里? 请帮帮我!
你的,拉斐尔。 来自奥地利的问候
答案 0 :(得分:3)
您的崩溃不是内存管理问题。你的崩溃就是你正在阅读数组的末尾。我们知道pictureStrings
此时非{n},因为如果它为零,则objectAtIndex:
方法将默认返回nil
(因为消息nil
返回{{ 1}} [1])。哦,更不用说你在nil
的呼叫周围都有if
- 但你可以安全地删除它,因为你不应该需要它。
因此,这里唯一真正发生的事情是在重新加载表视图之前没有调用objectAtIndex:
。但是,这很奇怪,因为我假设您在表视图的[pictureStrings addObject:aString]
数据源方法中执行类似return pictureStrings.count
的操作。如果数组中确实存在零元素,则表视图不会要求任何行,并且您不会遇到此崩溃。
我认为您的问题很可能是您没有将字符串添加到数组中。您可以通过查看代码并查看正在发生的事情来检查。
另外,请考虑更改代码以将单元格的文本设置为:
tableView:numberOfRowsInSection:
你说他们已经是字符串了,为什么还要打扰cell.textLabel.text = [pictureStrings objectAtIndex:indexPath.row];
来电?
[1]警告:并不总是返回stringWithFormat:
- 请阅读相关信息。