我正在开发一个使用Storyboard的iPhone应用程序。第一个场景,我有一个表视图控制器。我有一个属性文件名公司,我正在尝试加载要在UITableView中显示的该文件的值。我已经在这几个小时,但没有用。 This问题接近但问题的答案对我没有帮助。
以下是属性文件的格式。
这是我的代码。
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;
}
表格视图未填充。谁能告诉我我在俯瞰什么,在这里失踪?
答案 0 :(得分: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;
}
答案 1 :(得分:0)
理想情况下,plor应该有一个字典,其中一个键作为公司,其值应该是NSArray。
你读的是字典而不是数组。
答案 2 :(得分:0)
pList中的条目类型是什么。你能从你的pList获得公司名称吗?尝试通过公司的价值密钥对公司名称进行NSLogging。
答案 3 :(得分: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);
答案 4 :(得分:0)
嗨首先,plist文件的结构必须是这样的(只显示其中的一部分)
然后我放的地方是(总统是根文件夹)
然后我用来读取数据的代码是(总统是NSArray
)
答案 5 :(得分:0)
加载数据后,您需要重新加载tableview。
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *companiesFile = [[NSBundle mainBundle]pathForResource:@"companies" ofType:@"plist"];
companies = [[NSMutableArray alloc]initWithContentsOfFile:companiesFile];
[self.tableView reloadData];
}
答案 6 :(得分:0)
对于那种plist ..你必须创建一个NSDictonary ..
@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;
}