开发者

Can't get contents of file from a .plist file into an array

I'm trying to create a create a simple app where I have a TableView that should display the contents of a file. I have created a Table View in IB and dragged it's delegate and data source to the file's owner and I have manually created a .plist file with 1 array that have 2 items.

In my TableViewController.h i have declared an array.

NSArray * posts;

In my implementation file I have declared the required methods for UITableViewDataSource like this:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{
    NSLog(@"Returning num sections");
    return posts.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView  cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // create a cell 
    UITableViewCell * post = [[UITableViewCell alloc]    
    initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"post"];

    // fill i开发者_如何学编程t with content 
    post.textLabel.text = [posts objectAtIndex:indexPath.row];

    // return it
    return post;
} 

And in my ViewController 'viewDidLoad' method I try to add the content of my file to the 'posts' array like this:

- (void)viewDidLoad
{

    NSString * postFile = [[NSBundle mainBundle] pathForResource:@"Posts" ofType:@"plist"];
    posts = [[NSArray alloc] initWithContentsOfFile:postFile];

    NSLog(@"%@", postFile);
    NSLog(@"%i", posts.count);
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}

NSLog(@"%i", posts.count); returns 0, despite that I have added values to my .plist file. And nothing is displayed in the table view.

Suggestions on how so solve this would be appreciated.


I think you need to reload your table after you've loaded your postFile NSArray. If your view controller is a UITableViewController, try adding the following line of code to the end of your viewDidLoad method:

[self.tableView reloadData]

(On an unrelated note, you should also make your call to the super class the first thing you do in the viewDidLoad method, hence the comment the xcode template gives you.)

Edit: Problem with count.
I think you also have a problem with your debugging. count isn't a property of NSArray, so you can't use the dot syntax with it. You should be sending a message to your NSArray instance i.e. [posts count].


Ok, it seems like Xcode 4 creates plists with Dictionary as it's root type. If you want to use an array you have to open the .plist file in another text editor (probably doable in Xcode too) and change < dict >< /dict /> to < array >.

Also, it wasn't necessary to use an array at all. This also worked:

// Changed my array to a dictionary. 
NSDictionary * posts;   

// Get the cell text.
NSString * cellText = [[NSString alloc] initWithFormat:@"%i", indexPath.row]; 
// fill it with content
post.textLabel.text = [posts valueForKey:cellText];
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜