【问题标题】:Displaying all objects from array?显示数组中的所有对象?
【发布时间】:2013-03-13 15:38:36
【问题描述】:

我将在这里快速切入正题,我正在使用 MailCore API 连接到电子邮件并将消息下载到一个数组中,然后将这些消息放入数组中并将它们显示到一个表格视图中。

这里是将从服务器下载所有消息的代码(从 MailCore 官方网站检索):

messageSet = [inbox messagesFromUID:1 to:0 withFetchAttributes:CTFetchAttrEnvelope];

基本上,这将从服务器下载所有消息,我可以通过使用 NSLog 报告 Array 的内容来确认这一点,所有消息都在那里。

现在的代码只接收第一条消息(索引 0)并将其添加到我的消息数组中:

    CTCoreMessage *msg = [messageSet objectAtIndex:0];
    BOOL isHTML;
    isHTML = YES;

    messages = [[NSMutableArray alloc] init];
    sendernames = [[NSMutableArray alloc] init];

    [messages addObject:[msg bodyPreferringPlainText:&isHTML]];
    NSString *sender = [NSString stringWithFormat:@"%@", [msg sender]];

    [sendernames addObject:sender];
    [tableView reloadData];

因此,这再次获取索引 0 处的消息,这是第一条消息,并将其添加到消息数组中。我还有代码可以获取发件人姓名并将其添加到发件人数组中,忽略它。

这是我的 cellForRowAtIndexPath 方法中的代码(只是我为单元格上的元素设置的值的剪辑):

cell.nameText.text = [sendernames objectAtIndex:0];
cell.messageText.text = [messages objectAtIndex:0];

如您所见,它显示索引为 0 的对象,即第一条消息,与我们之前添加的相同。

最后,这里是设置我有多少行的代码。它基于下载所有消息的 messagesSet 数组。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [messageSet count];
}

我的问题是,我怎样才能修改我的代码来做两件事:

1.) 将所有已下载的对象添加到数组中,而不仅仅是第一个。 2.) 修改 cellForRowAtIndexPath 代码以显示消息数组中的所有对象。

提前非常感谢!

【问题讨论】:

    标签: iphone arrays sdk imap mailcore


    【解决方案1】:

    首先你遍历数组并填充你的数组

    for (CTCoreMessage *msg in messageSet) {
        [messages addObject:[msg bodyPreferringPlainText:&isHTML]];
        NSString *sender = [NSString stringWithFormat:@"%@", [msg sender]];
        [sendernames addObject:sender];
    }
    

    然后在行的单元格中做你正在做的事情,而不是在索引传递处为对象传递 0:indexPath.row

    希望这会有所帮助。

    【讨论】:

    • 非常感谢!有效!我将向您发送更多 MailCore 问题,好吗? :-)
    • 你当然可以,但我不能保证及时回复,我只有在完全无事可做的时候才会继续。
    • 可以给我你的邮箱吗?这样更容易。
    • 但是如何获取附件并将​​其显示到 webview?
    【解决方案2】:

    支持您的表格的模型实际上是 messageSet。您将其分配给服务器调用的结果。只需在您的委托方法中使用它:

    1. 下载后拨打[self.tableView reloadData];
    2. numberOfRowsInSection:可以return messageSet.count;
    3. cellForRowAtIndexPath: 将为每个可见的 indexPath 依次调用。它不需要处理所有消息,一次只处理一条,通过[messageSet objectAtIndex:indexPath.row];

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-29
      • 2019-06-22
      • 2019-04-16
      相关资源
      最近更新 更多