将Plist填充到UITableview

时间:2015-05-26 20:52:19

标签: ios objective-c uitableview plist unrecognized-selector

我的代码有问题,我无法弄清楚是什么问题。

我的代码是:

@implementation FirstViewController {
NSDictionary *countriesDetails;
NSArray *countriesList;

- (void)viewDidLoad {
    [super viewDidLoad];
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"countries" withExtension:@"plist"];
    countriesDetails = [NSDictionary dictionaryWithContentsOfURL:url];
    countriesList = countriesDetails.allKeys;
}

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

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    cell.textLabel.text = [[countriesList objectAtIndex:indexPath.row] objectForKey:@"country"];

    return cell;
}

我的plist文件是:

<dict>
<key>Paris</key>
<dict>
    <key>country</key>
    <string>France</string>
    <key>chName</key>
    <string>Paris</string>
    <key>chlink</key>
    <string>www.paris.com</string>
</dict>
<key>Rome</key>
<dict>
    <key>country</key>
    <string>Italy</string>
    <key>chName</key>
    <string>Rome</string>
    <key>chlink</key>
    <string>www.rome.com</string>
</dict>

所以我的应用程序将有多个tableview,第一个显示我在plist上的所有国家/地区。

我的XCode没有显示任何错误,但是当我运行该应用时,它会崩溃并显示:

  

2015-05-26 23:34:53.362 newApp [1511:95592] - [__ NSCFString objectForKey:]:无法识别的选择器发送到实例0x7fde31f242d0   2015-05-26 23:34:53.366 neaApp [1511:95592] *由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [__ NSCFString objectForKey:]:无法识别的选择器发送到实例0x7fde31f242d0'   * 首先抛出调用堆栈:

1 个答案:

答案 0 :(得分:2)

您的countriesListNSString组成,而不是NSDictionary。 将您的tableView:cellForRowAtIndexPath:方法更改为:

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    cell.textLabel.text = [[countriesDetails objectForKey:[countriesList objectAtIndex:indexPath.row]] objectForKey:@"country"];

    return cell;
}