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 在出列后不为零

如果您的字典不是问题,这应该可以解决您的问题:

-(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 回答