Я пытаюсь перезагружать таблицу каждый раз, когда некоторые данные, которые я получаю из Интернета, доступны.Вот что у меня есть:
SearchDataViewController:
<code>
- (void)parseDataXML {
parsingDelegate = [[XMLParsingDelegate alloc] init];
parsingDelegate.searchDataController = self;
// CONTAINS THE TABLE THAT NEEDS RE-LOADING;
ImplementedSearchViewController *searchController = [[ImplementedSearchViewController alloc] initWithNibName:@"ImplementedSearchView" bundle:nil];
ProjectAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
UINavigationController *nav = (UINavigationController *)[delegate.splitViewController.viewControllers objectAtIndex: 0];
NSArray *viewControllers = [[NSArray alloc] initWithObjects:nav, searchController, nil];
self.splitViewController.viewControllers = viewControllers;
[viewControllers release];
// PASS A REFERENCE TO THE PARSING DELEGATE SO THAT IT CAN CALL reloadData on the table
parsingDelegate.searchViewController = searchController;
[searchController release];
// Build the url request used to fetch data
...
NSURLRequest *dataURLRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:dataURL]];
parsingDelegate.feedConnection = [[[NSURLConnection alloc] initWithRequest:dataURLRequest delegate:parsingDelegate] autorelease];
}
</code>
ImplementedSearchViewController:
<code>
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSLog(@"count = %d", [keys count]);
// keys IS A NSMutableArray
return [self.keys count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
...
cell.textLabel.text = [keys objectAtIndex:row];
...
}
</code>
XMLParsingDelgate:
<code>
-(void) updateSearchTable:(NSArray *)array {
...
[self.currentParseBatch addObject:(NSString *)[array objectAtIndex:1]];
// RELOAD TABLE
[self.searchViewController.table reloadData];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict {
if ([elementName isEqualToString:@"..."]) {
self.currentParseBatch = [NSMutableArray array];
searchViewController.keys = self.currentParseBatch;
...
}
...
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@"..."]) {
...
[self performSelectorOnMainThread:@selector(updateSearchTable:) withObject:array waitUntilDone:NO];
}
...
}
</code>
Моя проблема в том, что когда я отлаживаюсь, вызовы идут между reloadData и numberOfRowsInSection до тех пор, пока массив ключей не будет заполнен последними данными, во время которого вызывается cellForRowAtIndexPath:
reloadData -> numberOfRowsInSection
reloadData -> numberOfRowsInSection
...
reloadData -> numberOfRowsInSection -> cellForRowAtIndexPath
Я хочу, чтобы таблица обновлялась для каждого отправляемого элемента, один за другим:
reloadData -> numberOfRowsInSection -> cellForRowAtIndexPath
reloadData -> numberOfRowsInSection -> cellForRowAtIndexPath
...
reloadData -> numberOfRowsInSection -> cellForRowAtIndexPath
Есть идеи, почему такое поведение?
Спасибовы!