0

MailCore API を使用して電子メールに接続し、メッセージを配列にダウンロードしてから、それらのメッセージを配列に取り込んでテーブル ビューに表示します。

サーバーからすべてのメッセージをダウンロードするコード (公式の MailCore Web サイトから取得) は次のとおりです。

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];
}

私の質問は、次の 2 つのことを行うようにコードを変更するにはどうすればよいかということです。

1.) 最初のオブジェクトだけでなく、すべての DOWNLOADED オブジェクトを配列に追加します。2.) メッセージ配列内のすべてのオブジェクトを表示するように cellForRowAtIndexPath コードを変更します。

よろしくお願いします!

4

2 に答える 2

1

まず、配列を反復処理し、配列を埋めます

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

次に、行のセルであなたがしていたことを行いますが、インデックスパスでオブジェクトに 0 を渡す代わりに: indexPath.row

お役に立てれば。

于 2013-03-23T23:40:00.970 に答える
0

テーブルを支えるモデルは実際には messageSet です。それをサーバー呼び出しの結果に割り当てます。デリゲートメソッドでそれを使用するだけです:

  1. ダウンロード後、電話[self.tableView reloadData];
  2. numberOfRowsInSection:できるreturn messageSet.count;
  3. cellForRowAtIndexPath:可視の indexPath ごとに順番に呼び出されます。すべてのメッセージを処理する必要はなく、一度に 1 つずつ処理する必要があります。[messageSet objectAtIndex:indexPath.row];
于 2013-03-23T23:54:55.540 に答える