0

サーバーから要求した JSON 情報を保持する NSMutableArrays があります。これらは、UITableViews 内で使用しています (今のところ 2 つあります)。UIRefreshControl を呼び出すたびに、私の NSMutableArray は内部のアイテムの以前の合計に加算されるようです。以前の配列カウントが 20 の場合、次に UIRefreshControl を呼び出すと、40 から 80 になります。これにより、UITableView に重複した値が表示されました。一部の関数 (更新コードの前など) で NSMutableArray を nil にしようとしましたが、うまくいきませんでした。どんなアイデアでも助けてください。

ここに私のコードの一部があります:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {


static NSString *CellIdentifier = @"CellIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
       // cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }


    if (tableView==tblMessaging) {
        //messageArrays is my NSMutableArray for this UITableView
        messageDict =[messageArrays objectAtIndex:indexPath.row];
        int statusMsg=[[messageDict objectForKey:@"Status"]intValue];
        PimmMessage *message=[messageDict objectForKey:@"Message"];

        lblMessageBody=(UILabel *)[cell viewWithTag:202];
        [lblMessageBody setText:[TMSGlobalFunctions decodeBase64String:message.body]];

        lblMessageTime=(UILabel *)[cell viewWithTag:201];

        [lblMessageTime setText:[TMSGlobalFunctions strDate:message.sentUTC]];

    }

    UIView *bgcolor=[[UIView alloc]init];
    [bgcolor setBackgroundColor:[UIColor colorWithRed:255/255.0f green:159.0/255.0f blue:0.0/255.0f alpha:.7]];
    bgcolor.layer.cornerRadius=1;
    [cell setSelectedBackgroundView:bgcolor];

  return cell;    
}

    -(void)checkMessage
{
 __block NSArray *nsArrSortedMessages = [[NSArray alloc] init];

    [ipimm getMessageListForRecipientUser:globUserID SenderUser:nil Status:-1 Priority:-1 StartTime:nil EndTime:nil Callback:^(NSArray *pimmMessageList, NSError *err, int requestIdentifier) {

            for(PimmMessage *message in pimmMessageList) {
                 NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];

                NSLog(@"message contnent %@", message.body);
            [dictionary setObject:[NSString stringWithFormat:@"%d",message.status] forKey:@"Status"];
            [dictionary setObject:message.sentUTC forKey:@"SentUTC"];
            [dictionary setObject:message forKey:@"Message"];
            [messageArrays addObject:dictionary];
        }

        NSLog(@"messageArray %d", [messageArrays count]);
        NSSortDescriptor *sortMessage = [[NSSortDescriptor alloc] initWithKey:@"SentUTC" ascending:NO];
        nsArrSortedMessages = [messageArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortMessage]];
        [tblMessaging reloadData];


    }];


}
4

2 に答える 2

1

私が正しく理解している場合は、tableView のデータソースとして messageArrays を使用しています。呼び出すたび-(void)checkMessageに、オブジェクトを messageArrays に追加しています。そうですか、それとも本当に nsArrSortedMessages をテーブルのデータ ソースとして使用したいのですか。

  -(void)checkMessage
    {


        [ipimm getMessageListForRecipientUser:globUserID SenderUser:nil Status:-1 Priority:-1 StartTime:nil EndTime:nil Callback:^(NSArray *pimmMessageList, NSError *err, int requestIdentifier) {
NSMutableArray *tempMessages = [[NSArray alloc] init];

                for(PimmMessage *message in pimmMessageList) {
                     NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];

                    NSLog(@"message contnent %@", message.body);
                [dictionary setObject:[NSString stringWithFormat:@"%d",message.status] forKey:@"Status"];
                [dictionary setObject:message.sentUTC forKey:@"SentUTC"];
                [dictionary setObject:message forKey:@"Message"];
                [tempMessages addObject:dictionary];
            }

            NSLog(@"messageArray %d", [messageArrays count]);
            NSSortDescriptor *sortMessage = [[NSSortDescriptor alloc] initWithKey:@"SentUTC" ascending:NO];
            messageArrays = [tempMessages sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortMessage]];
            [tblMessaging reloadData];


        }];
    }
于 2013-07-07T23:34:55.777 に答える
0

また、JSON データを自動的に取得し、テーブル ビューでの表示、更新などを処理する Sensible TableView フレームワークもチェックしてください。時間を大幅に節約できます。

于 2013-07-08T01:43:29.763 に答える