如何将Plist数据读取到UITableView

时间:2012-12-08 09:36:55

标签: iphone ios ipad uitableview plist

  

可能重复:
  How to Get Data from a PList into UITableView?

我有一个带字典的plist和每个字典的字符串数量。显示在下面的url中。这个项目列表在plist中有数千个。

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

eneter image

现在如何在plist

中显示此UITableView 我正在尝试的是:

- (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 个答案:

答案 0 :(得分:1)

将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;
}

答案 1 :(得分:1)

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

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后,我发现我们正在array of dictionaries中使用A.plist。< / p>

enter image description here

所以我发现代码本身有一个bug。不在plist文件中,您可以使用8000 data plist too ..它也可以使用。我完全退房了。现在您可以获得上述代码并开始使用。