0

長い間解決策を探していましたが、まだ成功していません。おそらくここの誰かが私を助けることができます.

バックグラウンドで Web サーバーと通信するスレッドを実行するアプリケーションを作成しました。時折、UITableView に表示したい情報をスレッドが受け取ることがあります。コンテンツの動的な性質のため、Web サーバーからの情報を格納するには NSMutableArray で十分であると判断しました。

Web サービスから情報を受け取るたびに、AppDelegate が通知を送信します。私の UITableView は、UITableView に表示する予定の特定の種類の情報を受け取るように登録します。

UITableViewController の initWithStyle メソッドには、次のコードが含まれています。

- (void)addContact:(NSNotification *)note {
    NSLog(@"%@", [note object]);

    NSString *message = (NSString *)[note object];
    NSString *name = [[message componentsSeparatedByString:@":"] objectAtIndex:2];

    contact = name;
    [array addObject:contact];
}   

- (void)viewDidLoad {
    [super viewDidLoad];

    array = [[NSMutableArray alloc] initWithObjects:@"test1", @"test2", nil];

    tv.dataSource = self;
    tv.delegate = self;

    self.tableView = tv;
}

AddContact の配列には、TableView に表示されるデータが含まれます。ViewDidLoad: で配列に手動で追加したすべてのデータはテーブルに表示されますが、AddContact: メソッドで追加されたデータについては表示されません。

誰が私が間違っているのか分かりますか?

4

1 に答える 1

1

更新はメインスレッドで行われていますか?この種の更新機能を使用して、確実に機能するようにすることができます。

- (void)refresh {
if([NSThread isMainThread])
{
    [self.tableView reloadData];
    [self.tableView setNeedsLayout];
    [self.tableView setNeedsDisplay];
}
else 
{
    [self performSelectorOnMainThread:@selector(refresh) withObject:nil waitUntilDone:YES];
}

}

于 2009-12-04T09:48:46.377 に答える