2010-03-12 67 views
2

我想使用NSMutableArray更新表视图中的数据。很简单:(NSMutableArray的奇怪问题 - 可能是一些内存损坏

发生什么事情是我从NSURLConnection回调中获取数据,我将它解析并存储在一个数组中,并在表视图上调用重载数据。问题是,当cellForRowAtIndexPath被回调框架。阵列仍显示了正确的元素计数,但我早已经存储的所有字符串对象显示为无效。

任何指针

+2

张贴一些代码。你保留你的阵列吗?你在数组中存储什么类型的对象?如果它是你自己的一类,那么这个班级是否适当地保留了你放入的东西? – 2010-03-12 21:14:44

+0

是的,你需要发布一些代码,因为它可能是一些事情。 – Remover 2010-03-21 17:43:46

回答

0

检查您是否保留在NSURLConnection的回调NSString对象。您是否自动删除它们?

编辑

好的,忘记最后一件事了。仔细检查我自己,NSMutableArray会在您将它们添加到数组时自动保留这些对象。这样你就不会需要明确留住他们:

的NSArray一样, 的NSMutableArray的情况下,保持强劲的 引用其内容。如果 不使用垃圾回收,则当您将一个对象添加到数组时, 对象会收到一条保留消息。当 对象从可变的 数组中移除时,它会收到释放消息。

所以你需要检查你没有做任何其他显式的发布你正在添加到阵列的对象。他们是否参考其他地方?

0

问题是你在哪里添加字符串对象到一个可变数组。字符串对象在那个时候已经失效了。这就是为什么你从数组访问它们的时间,它们无效或不存在。

所以最好的方法是检查代码在解析过程中添加字符串对象的位置。

0

您的问题可能是您没有正确启动阵列。

你是否在使用数组作为类的属性?

确保何时加载您分配的视图并启动阵列。

1

可为U的问题是像下面

NSString *value = [NSString stringWithFormat:@"%@",stringFromWebService]; 
[arrayOfObjects addObject:value]; 
[value release]; // This should not be released 

这未必是准确的,但可能是相似的,

这里值从NSString的类方法,它是一个自动释放的对象,因此,如果获得你可以看到它会被释放两次,一次是由autorelease和其他人发布。

这是您需要检查的区域。

希望它有助于

问候 纳文RV