无法将.plist文件中的文件内容转换为数组

时间:2011-06-24 17:19:05

标签: objective-c ios

我正在尝试创建一个简单的应用程序,其中我有一个应该显示文件内容的TableView。我在IB中创建了一个Table View,并将它的委托和数据源拖到文件的所有者手中,我手动创建了一个包含1个包含2个项目的数组的.plist文件。

在我的TableViewController.h中,我声明了一个数组。

NSArray * posts;

在我的实现文件中,我已经为UITableViewDataSource声明了所需的方法:

- (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 it with content 
    post.textLabel.text = [posts objectAtIndex:indexPath.row];

    // return it
    return post;
} 

在我的ViewController'viewDidLoad'方法中,我尝试将我的文件内容添加到'posts'数组中,如下所示:

- (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);返回0,尽管我已经为我的.plist文件添加了值。表格视图中没有显示任何内容。

如何解决这个问题的建议将不胜感激。

2 个答案:

答案 0 :(得分:2)

我认为您需要在加载postFile NSArray 后重新加载表格。如果您的视图控制器是UITableViewController,请尝试在viewDidLoad方法的末尾添加以下代码行:

[self.tableView reloadData]

(在一个不相关的说明中,您还应该在viewDidLoad方法中首先调用超级类,因此x​​code模板为您提供了注释。)

编辑:计数问题 我认为你的调试也有问题。 count不是NSArray的属性,因此您不能使用点语法。您应该向NSArray实例发送消息,即[posts count]

答案 1 :(得分:0)

好的,似乎Xcode 4创建了带有Dictionary的plist,因为它是root类型。如果你想使用一个数组,你必须在另一个文本编辑器中打开.plist文件(也可能在Xcode中可行)并更改< dict>< / dict />到< array>。

此外,根本不需要使用阵列。这也有效:

// 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];