UITableView (not using Navigation Template) getting specific data from plist

I'm using the example on page 210 of Beginning iPhone Development (Exploring the iPhone SDK) book and it's similar to what I want to do but that specific example is complicated by using sections in the TableView. I have a specific hierarchy in my plist...

Root  ---- Dictionary
        Rows  ---- Array
                Item 0- Dictionary
                        fullName  ---- String
                        address   ---- String
                Item 1   ---- Dictionary
                        fullName  ---- String
                        address   ---- String

So I have a UITableView that takes up a small portion of the view on that "screen" The rest of the view has other elements so I chose nut to use a navigation template.

The code I'm using doesn't match up because I'm really not clear on calling which fields.

Can someone show me a VERY simple example how I could list all the "firstNames" in that table. If something is wrong with my plist please let me know specifically what to change.

In a nutshell I want to loop through all the Item # dictionaries to list all the first names. My design is similar to a contact list, but not exactly a contact list.

Right now I'm using this code which simply displays the word "Rows" I changed the word rows to Rows1 in my plist and that shows up so it's grabbing that "array item". I hope I said that right.

-(void)viewDidLoad {    
    NSString *path = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"];

    NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path];
    self.names = dict;
    [dict release];

    NSArray *array = [[names allKeys] sortedArrayUsingSelector:@selector(compare:)];
    self.listData = array;

    [super viewDidLoad];
}

 

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

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *SimpleTableIdentifier = @"Identifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:SimpleTableIdentifier] autorelease];
    }

    NSUInteger row = [indexPath row];
    cell.textLabel.text = [listData objectAtIndex:row];
    return cell;
}

I've scoured the web for days trying to find a simple example that uses a plist hierarchy to list items in a table that is not part of a navigation template.

Thanks So Much

Answers


I wrote an example code, that is an address book. It reads the data from a plist.

the plist:

<?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>name</key>
        <string>Vikingo</string>
        <key>familyname</key>
        <string>Segundo</string>
        <key>street</key>
        <string>Avenida Roca y Coranado</string>
        <key>number</key>
        <integer>20</integer>
        <key>city</key>
        <string>Santa Cruz de la Sierra</string>
        <key>province</key>
        <string>Santa Cruz</string>
        <key>country</key>
        <string>Bolivia</string>
        <key>pictureurl</key>
        <string>vikingosegundo.png</string>
    </dict>
    <dict>
        <key>name</key>
        <string>Santa</string>
        <key>familyname</key>
        <string>Claus</string>
        <key>street</key>
        <string>Avenida Roca y Coranado</string>
        <key>number</key>
        <integer>20</integer>
        <key>city</key>
        <string>Santa Cruz de la Sierra</string>
        <key>province</key>
        <string>Santa Cruz</string>
        <key>country</key>
        <string>Finland</string>
        <key>pictureurl</key>
        <string>robot-santa.png</string>
    </dict>
</array>
</plist>

read the plist:

NSString* plistPath = [[NSBundle mainBundle] pathForResource:@"contacts" ofType:@"plist"];
contacts = [[NSArray arrayWithContentsOfFile:plistPath] retain];

display contacts in tableview:

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


// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [contacts count];
}


// Customize the appearance of table view cells.
- (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];
    }

    NSDictionary *dict = [contacts objectAtIndex:indexPath.row];
    cell.textLabel.text = [NSString stringWithFormat:@"%@ %@", [dict objectForKey:@"name"], [dict objectForKey:@"familyname"]];

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {


    DetailContactViewController *detailViewController = [[DetailContactViewController alloc] initWithNibName:@"DetailContactView" bundle:nil];
    detailViewController.contact = [contacts objectAtIndex:indexPath.row];
    // ...
    // Pass the selected object to the new view controller.
    [self.navigationController pushViewController:detailViewController animated:YES];

    [detailViewController release];

}

Need Your Help

How do I disable auto-completion for Eclipse using Java?

java eclipse

The auto-completion in Eclipse is extremely irritating. I feel like I've searched everything, but I cannot find where to disable auto-completion. Does anyone know how I can disable it? Thanks.

Using both local Git and (remote) TFS with Visual Studio 2013

git visual-studio visual-studio-2013 tfs

I started work on some code locally and used Git (Git Gui and command-line) to manage it. I've now been asked to put the project into TFS "at corporate". I can access TFS remotely using a VPN conne...

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.