1

我正在开发一个使用 Storyboard 的 iPhone 应用程序。第一个场景,我有一个 Table View Controller。我有一个名为公司的属性文件,我正在尝试加载该文件的值以显示在 UITableView 中。我已经在这几个小时,但无济于事。这个问题很接近,但它的答案也没有帮助我。

这是属性文件的格式。

在此处输入图像描述

这是我的代码。

CompaniesTableViewController.m文件

#import "CompaniesTableViewController.h"

@interface CompaniesTableViewController ()

@end

@implementation CompaniesTableViewController

NSMutableArray *companies;

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSString *companiesFile = [[NSBundle mainBundle]pathForResource:@"companies" ofType:@"plist"];
    companies = [[NSMutableArray alloc]initWithContentsOfFile:companiesFile];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

#pragma mark - Table view data source

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

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    cell.textLabel.text = [[companies objectAtIndex:indexPath.row]objectForKey:@"Value"];

    return cell;
}

表视图不会被填充。谁能告诉我我在这里忽略了什么?

4

7 回答 7

1

首先你必须分配和初始化UITableViewCell

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
if (cell == nil) {

        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

    }
    cell.textLabel.text = [[companies objectAtIndex:indexPath.row]objectForKey:@"Value"];

    return cell;
}
于 2012-12-07T11:50:07.787 回答
0

您好首先plist文件的结构必须是这样的(只显示了一部分)

在此处输入图像描述

然后就是我放的地方(总统是根文件夹)

在此处输入图像描述

然后我用来读取数据的代码是(总统在哪里NSArray

在此处输入图像描述

于 2012-12-07T12:31:02.220 回答
0
    NSString *path = [[NSBundle mainBundle] pathForResource:@"companies" ofType:@"plist"];
    NSData *plistData = [NSData dataWithContentsOfFile:path];
    NSString *error; NSPropertyListFormat format;
    NSArray *companyData = [NSPropertyListSerialization propertyListFromData:plistData
                                                                      mutabilityOption:NSPropertyListImmutable
                                                                                format:&format
                                                                      errorDescription:&error];

  companies= [[NSMutableArray alloc] initWithArray:companyData];
    NSLog(@"companyData:%@",companyData);
于 2012-12-07T12:08:36.407 回答
0

pList 中的条目类型是什么。你能从你的 pList 中得到公司的名称吗?尝试通过公司的值键 NSLogging 公司名称。

于 2012-12-07T12:00:21.420 回答
0

加载数据后,您需要重新加载表格视图。

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSString *companiesFile = [[NSBundle mainBundle]pathForResource:@"companies" ofType:@"plist"];
    companies = [[NSMutableArray alloc]initWithContentsOfFile:companiesFile];

    [self.tableView reloadData];
}
于 2012-12-07T13:16:14.840 回答
0

对于那种 plist.. 你必须创建一个 NSDictionary..

@implementation CompaniesTableViewController

    {
    NSDictionary *dict;
    NSArray *arayDict;
    }

..

NSString *companiesFile = [[NSBundle mainBundle]pathForResource:@"companies" ofType:@"plist"];
//populate dicationary
dict = [[NSDictionary alloc] initWithContentsOfFile:companiesFile];
//populate array with allkeys from dict
arayDict = [dict allKeys];

--

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    NSString *key = [arayDict objectAtIndex:indexPath.row];
    NSDictionary *dictionary = [dict objectForKey:key];
    cell.textLabel.text =[NSString stringWithFormat:@"%@", dictionary];
    return cell;
}
于 2012-12-07T14:10:32.987 回答
0

理想情况下,uor plist 应该有一个带有一个键的字典作为公司,它的值应该是一个 NSArray。

你读的是字典而不是数组。

于 2012-12-07T11:51:26.533 回答