2009-12-03 3 views
0

오랫동안 해결책을 찾고 있었지만 아직 성공하지 못했습니다. 아마도 여기 누군가가 나를 도울 수 있습니다.NSMutableArray를 사용하여 동적 내용을 표시하는 UITableView

백그라운드에서 웹 서버와 통신하는 스레드를 실행하는 응용 프로그램을 만들었습니다. 때때로 스레드가 UITableView에 표시하고자하는 정보를 수신합니다. 내용의 동적 특성 때문에 NSMutableArray가 웹 서버의 정보를 저장하기에 충분해야한다고 결정했습니다.

웹 서비스에서 정보를 수신 할 때마다 AppDelegate가 알림을 보냅니다. 내 UITableView는 UITableView에 표시 할 특정 종류의 정보를 받기 위해 등록합니다.

- (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에 표시되는 데이터를 포함

있는 UITableViewController의 initWithStyle 방법은 다음과 같은 코드를 포함한다. ViewDidLoad의 배열에 수동으로 추가 한 모든 데이터가 표에 표시되지만 AddContact : 메소드에 추가 된 데이터에는 표시되지 않습니다.

누구나 내가 뭘 잘못하고있어?

답변

1

메인 스레드에서 업데이트가 발생합니까? 이러한 종류의 새로 고침 기능을 사용하여 제대로 작동하는지 확인할 수 있습니다.

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

}

+0

덕분에, 내 문제를 해결! :) –