通过NSDictionary将NSUserDefaults standardUserDefaults放入tableview

时间:2012-12-02 17:56:17

标签: ios uitableview nsdictionary nsuserdefaults

我已经从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;
}

2 个答案:

答案 0 :(得分: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; }

答案 1 :(得分: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; 
}