iPhoneのYouTubeアプリのの「Most Popular」の部分のようなインターフェースの一部をiPhoneアプリとして制作しています。UITableViewが正しく更新されない(reloadDataの呼び出しでも)
この「人気」のセクションは、一番下にタブバーからアクセスし、上部のナビゲーションバーには、選択しUISegmentedControlが含まれている「今週、今日、月など..」
のほとんどのため、このアプリは、非常に似た構造のコンテンツを含むセルを持つUITableViewsで構成されています。MyAppTableViewControllerを継承しています。UITableViewControllerを継承しています。私の「 popular」セクションは、PopularTableViewControllerで構成され、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!無条件!...セルが表示外にスクロールされ、ビューに戻ります。
私はこの問題について多くの検索を行いました。同様の問題に対する1つの提案は、[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;
}
上記のコードはmyItemListが存在する場所でもあるMyAppTableViewControllerです。
は、あなたがあなたの細胞 – Daniel
@Danielを取り込むために使用するC頌歌を投稿 - 要求されたように私は質問を更新しました。 – IAmFledge
あなたの問題に関係はありませんが、itemIndexをもっと簡単に取得できます:NSUInteger itemIndex = [indexPath row]。 –