我正在尝试创建一个简单的应用程序,其中我有一个应该显示文件内容的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文件添加了值。表格视图中没有显示任何内容。
如何解决这个问题的建议将不胜感激。
答案 0 :(得分:2)
我认为您需要在加载postFile NSArray 后重新加载表格。如果您的视图控制器是UITableViewController,请尝试在viewDidLoad
方法的末尾添加以下代码行:
[self.tableView reloadData]
(在一个不相关的说明中,您还应该在viewDidLoad
方法中首先调用超级类,因此xcode模板为您提供了注释。)
编辑:计数问题
我认为你的调试也有问题。 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];