2013-03-23 1 views
0

Я собираюсь быстро перейти к преследованию здесь, я использую API MailCore для подключения к электронной почте и загрузки сообщений в массив, затем беру эти сообщения в массиве и отображаю их в виде таблицы.Отображение всех объектов из массива?

Вот код (получен с официального сайта 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.) Добавить все скачанные объекты в массив, а не только первый. 2.) Измените код cellForRowAtIndexPath, чтобы отобразить все объекты в массиве сообщений.

Большое спасибо!

ответ

1

Ну во-первыхах, вы перебирать массив и заполнить ваш массив, как так

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

Тогда в ячейке для строки просто делать то, что вы делаете, но вместо передачи 0 для объекта с индексом прохода: indexPath. строка

Надеюсь, это поможет.

+0

Большое вам спасибо! Это сработало! Я попрошу вас с вами больше вопросов MailCore, хорошо?:-) – ranjha

+0

Вы уверены, что можете, но я не могу обещать своевременные ответы, я только продолжаю, когда мне абсолютно нечего делать. –

+0

Ха-ха! Спасибо, я буду помнить об этом! – ranjha

0

Модель, поддерживающая ваш стол, действительно представляет собой набор сообщений. Вы назначаете это с результатом вызова сервера. Просто использовать это в ваших методов делегата:

  1. После загрузки, вызовите [self.tableView reloadData];
  2. numberOfRowsInSection: может return messageSet.count;
  3. cellForRowAtIndexPath: будет вызываться последовательно для каждого видимого indexPath. Он не должен обрабатывать все сообщения, только по одному, через [messageSet objectAtIndex:indexPath.row];