我将快速切入此处,我使用MailCore API连接到电子邮件并将消息下载到数组中,然后将这些消息放入数组中并将它们显示在表视图中。
以下代码(从官方MailCore网站检索)将从服务器下载所有消息:
messageSet = [inbox messagesFromUID:1 to:0 withFetchAttributes:CTFetchAttrEnvelope];
基本上,这将从服务器下载所有消息,我可以通过使用NSLog报告数组的内容来确认这一点,所有消息都在那里。
现在这里的代码只需要第一个消息(索引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。)将所有DOWNLOADED对象添加到数组中,而不仅仅是第一个。 2.)修改cellForRowAtIndexPath代码以显示消息数组中的所有对象。
提前非常感谢!
答案 0 :(得分:1)
首先,您遍历数组并填充数组
for (CTCoreMessage *msg in messageSet) {
[messages addObject:[msg bodyPreferringPlainText:&isHTML]];
NSString *sender = [NSString stringWithFormat:@"%@", [msg sender]];
[sendernames addObject:sender];
}
然后在行的单元格中执行您正在执行的操作,而不是在索引传递时为对象传递0:indexPath.row
希望这有帮助。
答案 1 :(得分:0)
支持你的表的模型实际上就是messageSet。您可以使用服务器调用的结果进行分配。只需在委托方法中使用它:
[self.tableView reloadData];
numberOfRowsInSection:
可以return messageSet.count;
cellForRowAtIndexPath:
。它不需要通过[messageSet objectAtIndex:indexPath.row];