【发布时间】:2010-06-17 16:45:07
【问题描述】:
每当我从网络上获得的一些数据可用时,我都会尝试重新加载表格。这就是我所拥有的:
搜索数据视图控制器:
- (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];
}
实现的SearchViewController:
- (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];
...
}
XMLParsingDelgate:
-(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];
}
...
}
我的问题是,当我调试时,调用在 reloadData 和 numberOfRowsInSection 之间进行,直到键数组被最后一个数据填充,即 cellForRowAtIndexPath 被调用的时间:
reloadData -> numberOfRowsInSection reloadData -> numberOfRowsInSection ... reloadData -> numberOfRowsInSection -> cellForRowAtIndexPath我想要的是为我发送的每个元素一个一个地更新表格:
reloadData -> numberOfRowsInSection -> cellForRowAtIndexPath reloadData -> numberOfRowsInSection -> cellForRowAtIndexPath ... reloadData -> numberOfRowsInSection -> cellForRowAtIndexPath任何想法为什么会出现这种行为?
谢谢!
【问题讨论】:
标签: iphone uitableview ipad