0

我正在尝试将字典 plist 显示到 UITableView 中,我在这里阅读了很多问题和答案,但没有运气!似乎单元格返回 null !这是我的清单: 在此处输入图像描述

和我的代码:

-(void)viewDidLoad {


    NSString *path = [[NSBundle mainBundle] pathForResource:@"feed" ofType:@"plist"];
    newsFeed = [NSArray arrayWithContentsOfFile:path];
}


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return newsFeed.count;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    return dictionary.allKeys.count;
}

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

   dictionary = [newsFeed objectAtIndex:indexPath.section];
   cell.textLabel.text = [[newsFeed objectAtIndex:indexPath.row] valueForKey:@"title"];

    return cell;

}

结果什么都没有:

在此处输入图像描述

4

4 回答 4

2

试试这个你只想显示标题然后试试这个

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

        return newsFeed.count;
    }

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

        dictionary = [newsFeed objectAtIndex:indexPath.row];
        cell.textLabel.text = [dictionary valueForKey:@"title"];

        return cell;

    }  

编辑
如果你想显示所有记录然后试试这个

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return newsFeed.count;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    return dictionary.allKeys.count;
}

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

    dictionary = [newsFeed objectAtIndex:indexPath.section];

    NSString *key =[[dictionary allKeys] objectAtIndex:indexPath.row];

    cell.textLabel.text = [dictionary valueForKey:key];

    return cell;

}
于 2013-05-13T08:37:03.523 回答
0

试试这个,我经常使用 plist。

在 ViewDidLoad

 NSString *plistPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:self.plistName];

 self.tableContents=[NSDictionary dictionaryWithContentsOfFile:plistPath];

 NSLog(@"table %@",self.tableContents);
 NSLog(@"table with Keys %@",[self.tableContents allKeys]);

 self.sortedKeys =  [[self.tableContents allKeys] sortedArrayUsingSelector:@selector(localizedStandardCompare:)];


- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section {
    NSArray *listData =[self.tableContents objectForKey:[self.sortedKeys objectAtIndex:section]];
    return [listData count];
}


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

    static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";

    NSArray *listData =[self.tableContents objectForKey:[self.sortedKeys objectAtIndex:[indexPath section]]];

    UITableViewCell * cell = [tableView
                              dequeueReusableCellWithIdentifier:SimpleTableIdentifier];

    if(cell == nil) {
        cell = [[UITableViewCell alloc]
                 initWithStyle:UITableViewCellStyleDefault
                 reuseIdentifier:SimpleTableIdentifier];
    }

    cell.selectionStyle=UITableViewCellSelectionStyleNone;

    NSUInteger row = [indexPath row];

    cell.textLabel.text = [NSString stringWithFormat:@" %@",[listData objectAtIndex:row]]; //take your object out

return cell;
}
于 2013-05-13T08:52:44.130 回答
0

你应该学习如何调试这样的问题。或者,如果您尝试过,您应该告诉我们您在问题中尝试了什么。

设置断点viewDidLoad并确保 plist 已正确加载。路径可能是错误的。该文件可能已损坏或具有与您期望的不同的根对象。

中设置断点numberOfSectionsInTableView。它被调用了吗?它是在加载 plist 之前还是之后调用的?大概之后吧。在这种情况下,您需要调用[tableView reloadData]. 如果它被称为你返回什么。

像这样继续,一步一步,直到找到原因。

于 2013-05-13T08:35:57.500 回答
0

在此处输入图像描述

  1. 将 Root 设置为NSDictionary,将您newsFeed的放入字典中。
  2. 利用NSDictionary *dict = [NSDictionary ...fromFile:...];
  3. newsFeed = [dict valueForKey:@"some_key"];
于 2013-05-13T08:35:23.970 回答