如何读取Plist数据到UITableView

可能重复:
如何从PList获取数据到UITableView?

我有一个plist字典和每个字典的string数量。显示在下面的URL。这个项目列表是plist中的成千上万。

现在要将这些列表显示在tableview中

进取者形象

现在我怎么能显示这个plistUITableView

我正在尝试的是:

 - (id)readPlist:(NSString *)fileName { NSString *error; NSPropertyListFormat format; id plist; NSString *localizedPath = [[NSBundle mainBundle] pathForResource:@"A" ofType:@"plist"]; dic =[NSDictionary dictionaryWithContentsOfFile:localizedPath]; plist = [NSPropertyListSerialization propertyListFromData:dic mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&error]; if (!plist) { NSLog(@"Error reading plist from file '%s', error = '%s'", [localizedPath UTF8String], [error UTF8String]); [error release]; } return plist; } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { dict =[self readPlist:@"A"]; return dict.allKeys.count; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { dict = [self readPlist:@"A"]; key = [dict.allKeys objectAtIndex:section]; return [[dict valueForKey:key] count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } cell.textLabel.text = [[dict objectForKey:key] objectAtIndex:indexPath.row]; return cell; } 

更新2:您需要为您的xibViewController tableView设置delegatedatasource

在你的ViewController.h文件中

 @interface ViewController:UIViewController <UITableViewDelegate, UITableDataSource> 

试试我为你写的这段代码。

 - (void)viewDidLoad { tableView.delegate = self; tableView.dataSource = self; NSString *path = [[NSBundle mainBundle] pathForResource:@"Filename" ofType:@"plist"]; NSArray *contentArray = [NSArray arrayWithContentsOfFile:path]; // Having outlet for tableArray variable. tableArray = [[NSMutableArray alloc]initWithArray:contentArray copyItems:YES]; [super viewDidLoad]; // Do any additional setup after loading the view from its nib. } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return [tableArray count]; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // In your case dictionary contains strings with keys and values. The below line returns dictionary only. not array.. NSDictionary *dictionary = [tableArray objectAtIndex:section]; return dictionary.allKeys.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *cellIdentifier = @"MyCell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier]; } NSDictionary *dictionary = [tableArray objectAtIndex:indexPath.section]; NSArray *keysArray = dictionary.allKeys; // This below line display the key in textLabel cell.textLabel.text = [keysArray objectAtIndex:indexPath.row]; // Below line will display the value of a key in detailTextLabel. cell.detailTextLabel.text = [dictionary valueForKey:[keysArray objectAtIndex:indexPath.row]]; return cell; } 

更新2:在我的MAC中看到你的plist后,我发现我们正在A.plist使用array of dictionaries

在这里输入图像说明

所以我发现我们的代码本身存在一个bug 。 不在plist文件中,你也可以使用你的8000 data plist too 。它的工作也是如此。 我已经完全检查了。 现在你可以得到上面的代码,并开始工作。

将Plist数据存储在数组中

 - (id)readPlist:(NSString *)fileName { NSString *error; NSPropertyListFormat format; id plist; NSString *localizedPath = [[NSBundle mainBundle] pathForResource:@"A" ofType:@"plist"]; // declare your array in .h file array = [NSArray arrayWithContentsOfFile:localizedPath]; plist = [NSPropertyListSerialization propertyListFromData:dic mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&error]; if (!plist) { NSLog(@"Error reading plist from file '%s', error = '%s'", [localizedPath UTF8String], [error UTF8String]); [error release]; } return plist; } 

然后写在桌子上

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } cell.textLabel.text = [array objectAtIndex:indexPath.row] valueForKey:@"keyname"];; return cell; }