0

mysqlサーバーにデータを保存するテーブルベースのアプリがあります。アプリは更新され、永続化のためにデータをnsdictionaryに書き込みます。データに変更を加えるときは、テーブルを更新する必要があります。ただし、[self tableview reloadData]を配置すると、行を選択するとアプリがクラッシュします。テーブルを更新する方法について誰かがアイデアを持っていますか?これを捨てて、データからオブジェクトを作成して使用する必要がありますか?

ありがとう。

  -(void) loadData3;{

    MyAppDelegate *AppDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
self.tableDataSource3 = [AppDelegate.data3 objectForKey:@"Rows"];
NSLog(@"AppDelegate.data3 : %@",AppDelegate.data3 );
NSLog(@"self.tableDataSource3 : %@",self.tableDataSource3 );

}

- (void)viewDidLoad {
    [super viewDidLoad]; 
    [self loadData3];
    if(CurrentLevel3 == 0) {
    self.navigationItem.title = @"Family";
}
else 
    self.navigationItem.title = CurrentTitle3;  
}
}


- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];

 }

これがcellForRowAtIndexPathメソッドです。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    }

    // Set up the cell...
    NSDictionary *dictionary = [self.tableDataSource3 objectAtIndex:indexPath.row];
    cell.textLabel.text = [dictionary objectForKey:@"Title"];

    return cell;
}
4

1 に答える 1

0

reloadData が正しい方法であり、クラッシュの原因となっているバグを見つけて修正する必要があるという説明に同意します。

ここに注目すべき2つの大きなものがあります:

  1. データベースを変更した直後に、numberOfRowsInSection を呼び出すと、テーブルが変更された結果として有効な新しい値が返されることを確認してください。(これにより、多くの人が問題を投稿するのを見てきました)。

  2. cellForRowAtIndexPath メソッドを注意深く見てください。このメソッドは、セルにデータを設定するだけでなく、セルのリサイクルも担当することに注意してください。これが誤って処理された多くの例を見てきました - そしてテーブルデータがその後リロードされたとき - そしてセルが再利用されて再割り当てされる必要があります - 物事は混乱します. あなたの問題はここにあると 99% 確信しています。

于 2010-10-17T01:55:17.313 に答える