如何修改NSMutableArray中的对象

时间:2012-09-01 10:05:15

标签: objective-c xcode nsmutablearray


我正在尝试创建一个从服务器显示事件信息的基本应用程序 到目前为止,我下载了xml文件中的所有信息,并使用NSXMLParser解析它 我有一个我创建的事件对象,它存储了每个事件的所有信息,然后我用这些事件填充NSMutableArray。
然后我想在每个UITableView Cell显示时异步加载与每个事件相关的图像,并将它们存储在NSMutableArray中的事件对象的NSData中。这样我只会加载我需要的图像 我的NSMutableArray的布局看起来像这样(简化):

events
      -event1
            -(NSString *)title
            -(NSURL *)imageURL
            -(NSData *)eventData
      -event2
            -(NSString *)title
            -(NSURL *)imageURL
            -(NSData *)eventData
etc..

我不知道这里的最佳做法是什么,并且正在努力使其发挥作用。

  • 选项1
    我可以尝试直接从MasterViewController设置它,这对我来说似乎不对,我收到一个错误。 如果我使用代码

    [[events objectAtIndex:cellIndexPath.row] eventImageData] = [[NSData alloc] initWithContentsOfURL:[[events objectAtIndex:cellIndexPath.row] eventImgURL]];
    

我收到错误:expression not assignable

  • 选项2
    我可以在事件对象本身中编写一个方法来下载图像。我做了这个,并且在我的生活中无法获取事件对象,要求MasterViewController在完成图像处理后刷新相应的NSTableViewCell。

我的问题是,我是否正确地选择了这些思路?我可以在NSMutableArray中的对象内部分配新的NSData吗?还是我在正确的轨道上要求事件对象下载它自己的图像?
感谢您花时间阅读这个过于冗长的问题。

2 个答案:

答案 0 :(得分:3)

您不能使用getter方法设置属性,必须使用setter方法:

[[events objectAtIndex:cellIndexPath.row] setEventImageData:[[NSData alloc] initWithContentsOfURL:[[events objectAtIndex:cellIndexPath.row] eventImgURL]]];

答案 1 :(得分:1)

修改NSMutableArray中对象的另一种方法是:

if([[events objectAtIndex:cellIndexPath.row] count] >=2)
{
  [[events objectAtIndex:cellIndexPath.row] replaceObjectAtIndex:2  withObject:[[NSData alloc] initWithContentsOfURL:[[events objectAtIndex:cellIndexPath.row] eventImgURL]];
}