2013-01-17 3 views
0

Twitter 검색에서 JSON 데이터를 가져 오는 UITableView가 있습니다. 보기를 자동 새로 고치기 위해 폴링을 사용하고 있습니다.UITableView 새로 고침 충돌

[NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(autoTweets:) userInfo:nil repeats:YES]; 

을하고 내가 가진 : 내있는 viewDidLoad에서

, 내가 가진

-(void) autoTweets : (NSTimer *)theTweets 
{ 
    NSURL *url = [NSURL URLWithString:@"http://search.twitter.com/search.json?q=%23hatlive%20-%22RT%20%40%22"]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 

    connection = [NSURLConnection connectionWithRequest:request delegate:self]; 


    if (connection) 
    { 
     webData = [[NSMutableData alloc] init]; 
    } 

    [[self myTableView]setDelegate:self]; 
    [[self myTableView]setDataSource:self]; 
    array = [[NSMutableArray alloc] init]; 
} 

가하고이 데이터를 10 초마다 새로 고쳐집니다. 문제는 코드가 실행될 때 10 초 스크롤하면 앱이 충돌한다는 것입니다. 스크롤하지 않으면 잘 업데이트됩니다. 아무도 이유를 아나요?

+0

위임 구현을 게시 할 수 있습니까? 어디에서 추락합니까? 여러 스레드를 사용합니까? –

답변

1

array은 테이블 뷰의 데이터 소스에서 사용하는 데이터라고 가정하면 연결 시작시 배열의 내용을 변경하는 것이 문제입니다. 그런 다음 연결이 백그라운드에서 완료되면 내용이 업데이트됩니다. 한편, 테이블이 스크롤하면서 배열의 이전 내용에 액세스하려고 시도하고 있습니다.

한 가지 해결 방법은 새 연결을 처리하는 데 사용되는 임시 배열을 설정하는 것입니다. 테이블에서 reloadData을 호출하기 직전까지 이전 배열을 새 배열로 업데이트하지 마십시오.

+0

그걸 고쳤습니다. 감사! – Stickerbox

1

데이터를 업데이트하는 동안 [self.tableView beginUpdates];[self.tableView endUpdates];을 시도하십시오. 또한 데이터 소스를 재설정하고 항상 위임 할 필요가 없습니다. [self.tableView reloadData];으로 전화 할 수도 있습니다.

0

새로 고침 직전에 테이블보기에서 터치를 해제 한 다음 데이터가 설정된 후 사용하도록 설정할 수 있습니다.

self.myTableView.userInteractionEnabled = YES; // before refresh 
self.myTableView.userInteractionEnabled = NO; // after