0


我正在尝试创建一个显示来自服务器的事件信息的基本应用程序。
到目前为止,我下载了一个 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 吗?还是我在正确的轨道上要求事件对象下载它自己的图像?
感谢您花时间阅读这个冗长的问题。

4

2 回答 2

3

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

[[events objectAtIndex:cellIndexPath.row] setEventImageData:[[NSData alloc] initWithContentsOfURL:[[events objectAtIndex:cellIndexPath.row] eventImgURL]]];
于 2012-09-01T10:08:54.150 回答
1

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

if([[events objectAtIndex:cellIndexPath.row] count] >=2)
{
  [[events objectAtIndex:cellIndexPath.row] replaceObjectAtIndex:2  withObject:[[NSData alloc] initWithContentsOfURL:[[events objectAtIndex:cellIndexPath.row] eventImgURL]];
}
于 2012-09-01T10:27:38.737 回答