IOS:Viewdidload中的NSMutableArray

时间:2011-04-13 16:07:37

标签: xcode ios uiimageview nsmutablearray

在我的项目中我使用NSmutablearray,我在.m(viewDidLoad)中填充UIImageView

arrayView = [[NSMutableArray alloc] initWithObjects: image1, image2, image3, nil];

但是方法

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

当我写

int i = 1;
[[arrayView objectAtIndex:i] setImage:image];

有一个例外,说我的数组是空的......为什么?

2 个答案:

答案 0 :(得分:1)

请发布viewDidLoad的其余部分。我想看看image1是如何初始化的。这一行:

arrayView = [[NSMutableArray alloc] initWithObjects: image1, image2, image3, nil];
如果image1为零,

将返回一个空数组。您还应该通过不对数据源做出假设来保护您的应用免受崩溃。如果数组为空,则不应该崩溃,只显示一个空的tableView。

[编辑]

我刚看完你在另一个答案中提出的最后一条评论。听起来像你的imageViews是在IB中创建的。确保它们已连接到IB中的image1等插座。

答案 1 :(得分:0)

请改为尝试:

if (i < [arrayView count]) {
    UIImageView *imageView = [arrayView objectAtIndex:i];
    imageView.image = image;
}

分离访问数组元素(通过将其分配给实际的UIImageView对象),然后分配新图像可能会有所帮助。我已经看到过这样的情况:如果你堆积太多的操作,事情会变得混乱,特别是如果你正在处理不同类型的对象,可能有或没有你正在使用的选择器。

为什么你的阵列空转是另一个问题。在viewDidLoad中初始化它似乎是正确的。您可能需要在表方法中添加一些“保护”(如上所述)以避免访问空数组。然后在viewWillAppear:之类的方法中,调用reloadData