0

stackoverflow の周りからいくつかのスニペットをつなぎ合わせましたが、期待どおりに動作するようには見えません。

NSUSerDefaults を取得して、UITableView にデータを入力しようとしています。

ディクショナリが読み込まれ、すべての NSLog の出力が期待どおりになります。しかし、最終的cellForRowAtIndexPathにはテーブル ビューに何も返されません。

セル識別子と再利用を「セル」に設定していますが、テーブルビューが空になります

- (void)viewDidLoad {
    [super viewDidLoad];

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    myDictionary = [defaults dictionaryRepresentation]; }
    NSLog(@"Dict: %@",myDictionary);
    NSLog(@"count: %d", [myDictionary count]);
    NSArray * allKeys = [myDictionary allKeys];
    NSLog(@"%@",allKeys);

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1; }

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [myDictionary count]; }

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

    static NSString *CellIdentifier = @"cell";    
    UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    NSArray * allKeys = [myDictionary allKeys];
    cell.textLabel.text = [myDictionary objectForKey:[allKeys objectAtIndex:indexPath.row]];
    cell.detailTextLabel.text = [myDictionary objectForKey:[allKeys objectAtIndex:indexPath.row]];;

    return cell; }

myTableViewController.m私のファイルの先頭に:

@interface myTableViewController ()
{
    NSDictionary *myDictionary;
}
4

2 に答える 2

1

デキュー後に uitableviewcell が nil ではないと仮定しています

辞書に問題がない場合、これで問題が解決するはずです。

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

    static NSString *CellIdentifier = @"cell";    
    UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell == nil){ 
       cell = *create your tableviewcell here*;
    }
    NSArray * allKeys = [myDictionary allKeys];
    cell.textLabel.text = [myDictionary objectForKey:[allKeys objectAtIndex:indexPath.row]];
    cell.detailTextLabel.text = [myDictionary objectForKey:[allKeys objectAtIndex:indexPath.row]];;

    return cell; }
于 2012-12-02T18:18:12.170 に答える
1

コメントからのまとめ。

次のように .m を更新します (すばやく入力します - 以下にタイプミスの可能性があります)。

@interface myTableViewController () <UITableViewDataSource, UITableViewDelegate>
{
    NSDictionary *myDictionary;
    NSArray *myKeys;
}

- (void)viewDidLoad {
    [super viewDidLoad];

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    myDictionary = [defaults dictionaryRepresentation]; 
    myKeys = [defaults allKeys];

    // not sure where your table view is created but set the dataSource and delegate
    myTableView.dataSource = self;
    myTableView.delegate = self;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return myKeys.count; 
}

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

    static NSString *CellIdentifier = @"cell";    
    UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell == nil){ 
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
    }

    NSString *key = myKeys[indexPath.row];
    cell.textLabel.text = myDictionary[key];
    cell.detailTextLabel.text = myDictionary[key];

    return cell; 
}
于 2012-12-02T18:33:30.607 に答える