我已经阅读了所有类似的问题并尝试了所有建议,但仍然没有。也许有人能看出我的缺点。
我的视图控制器是通过两个按钮之一从另一个视图控制器启动的。按钮点击发送 NSNotification(带有附加数组),这个视图控制器预期这个通知,然后调用这个方法:
- (void)addContentToArray:(NSNotification *)aNotification {
array = [NSArray arrayWithArray:[aNotification object]];
([array count] == 6) ? (category = YES) : (category = NO);
[myTableView reloadData];
NSLog(@"%d", [array count]);
NSLog(@"%@", myTableView);
}
每次都会调用该方法,我可以从更改数组计数中看出这一点。这里的通知对象是从前一个视图控制器传递的数组,我将这些对象分配给我的本地数组属性——这是我的 UITableView 源。所以我要做的是尝试重用 UITableView 来显示正在传递的任何数组的元素。它适用于传递的第一个数组(以先到者为准)。
当我点击第二个按钮时,新数组已成功传递(如前所述,我从不同的 [array count] 日志中知道:3 对 6 个对象在不同的数组中)。但是,没有发生的是 UITableView 不会刷新(尽管当我在表中选择一行时传递的值来自正确的数组,即使显示了错误的值)。
下面是 UITableView 数据源方法:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [array count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Identifier"];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Identifier"];
}
cell.textLabel.text = [[array objectAtIndex:indexPath.row] objectForKey:@"name"];
if (category) {
cell.detailTextLabel.text = [[array objectAtIndex:indexPath.row] objectForKey:@"description"];
}
return cell;
}
那么,我做错了什么?
其他一些可能有帮助的注意事项:
- NSLog(@"%@", myTableView); 返回(null),这有点令人担忧。这里的 myTableView 是我的 nib 文件中的 UITableView,它正确连接到视图控制器,声明为属性并合成
- 有问题的视图控制器是 PKRevealController 的rightViewController,因此当它被重复调用时,会调用 viewWillAppear 方法,但不会调用 viewDidLoad (尽管正如我已经提到的,addContentToArray: 方法也每次都被调用)
- 此外,对于那些有点熟悉 PKRevealController 的人来说——当我尝试从我的视图控制器中记录 focusController 时,它会说 frontViewController——移动以显示我的视图控制器的那个——是被聚焦的那个。这可能是 myTableView 为(null)的原因吗?
我将不胜感激任何见解和帮助!