The plist root must be an array. The array must contain two dictionaries (your sections). Dictionaries will contain two keys: one for the section heading and one for the lines in the section.
Assuming you read your plist in NSArray * sections, you can return the section, number of rows, section title, and cell names using the following code.
Your plist file will look like this:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <array> <dict> <key>Title</key> <string>Section1</string> <key>Rows</key> <array> <string>Section1 Item1</string> <string>Section1 Item2</string> </array> </dict> <dict> <key>Title</key> <string>Section2</string> <key>Rows</key> <array> <string>Section2 Item1</string> <string>Section2 Item2</string> </array> </dict> </array> </plist> #import "RootViewController.h" @interface RootViewController () @property (copy, nonatomic) NSArray* tableData; @end @implementation RootViewController @synthesize tableData; - (void) dealloc { self.tableData = nil; [super dealloc]; } - (void) viewDidLoad { [super viewDidLoad]; self.tableData = [NSArray arrayWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @"Table" ofType: @"plist"]]; } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; { return [tableData count]; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section; { return [[[tableData objectAtIndex: section] objectForKey: @"Rows"] count]; } - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section; { return [[tableData objectAtIndex: section] objectForKey: @"Title"]; } - (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 = [[[tableData objectAtIndex: indexPath.section] objectForKey: @"Rows"] objectAtIndex: indexPath.row]; return cell; } @end
source share