我正在生產iPhone應用程序,其中的部分界面完全像'最受歡迎'部分的iPhone YouTube應用程序。UITableView將無法正確更新(即使調用reloadData)
這種「流行」部分從標籤欄在底部訪問,並在頂部的導航欄包含UISegmentedControl選擇「今天,這周,月等..」
因爲大多數的該應用程序由包含非常類似結構化內容的單元格的UITableView組成,我創建了一個通用MyAppTableViewController,它繼承UITableViewController。我的'受歡迎的'部分因此由熱門桌面控制器,它繼承MyAppTableViewController。實際的UITableView駐留在MyAppTableViewController中。
PopularTableViewController具有方法:
- (void) segmentChangeTimeframe:(id)sender {
UISegmentedControl *segCtl = sender;
if([segCtl selectedSegmentIndex] == 0)
{
// Call [self parse-xml-method-which-resides-in-MyAppTableViewController]
}
//... ... ...
}
的MyAppTableViewController利用的NSXMLParser的,因此具有的代碼:
- (void)parserDidEndDocument:(NSXMLParser *)parser {
[self.myTableView reloadData];
}
(還有其它方法更新數據結構,表格視圖獲取數據)
我已經將控制檯輸出代碼放入xml解析方法中,並且在運行時選擇不同的段會導致正確的xml文件被正確解析,並且數據結構似乎包含正確的值。
問題是表單元格的內容不會改變! GRR!除非!...一個單元格從視圖中滾動出來,然後回到視圖中......然後它變了!
我已經做了很多關於這個問題的搜索,對於類似問題的一個建議是將[self.myTableView reloadData]放入它自己的方法中,例如 myReloadDataMethod,然後使用:
[self performSelectorOnMainThread:@selector(myReloadDataMethod) withObject:nil waitUntilDone:NO];
我試圖把上面的代碼到parserDidEndDocument方法,這讓完全沒有區別!我絕對難住,想知道是否有人知道這裏發生了什麼。
更新:
填充細胞碼與完成:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyIdentifier = @"MyIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:MyIdentifier] autorelease];
}
// Set up the cell
int itemIndex = [indexPath indexAtPosition: [indexPath length] - 1];
NSString *artistName = [[myItemList objectAtIndex: itemIndex] objectForKey: @"itemA"];
NSString *mixName = [[myItemList objectAtIndex: itemIndex] objectForKey: @"itemB"];
cell.textLabel.text = itemA;
cell.detailTextLabel.text = itemB;
cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
return cell;
}
上面的代碼是在MyAppTableViewController這也是其中myItemList駐留。
發佈用於填充你的細胞 – Daniel
@Daniel的C頌歌 - 我已經更新了問題的要求。 – IAmFledge
與您的問題無關,但您可以更輕鬆地獲取itemIndex:NSUInteger itemIndex = [indexPath row]。 –