0

我已经阅读了所有类似的问题并尝试了所有建议,但仍然没有。也许有人能看出我的缺点。

我的视图控制器是通过两个按钮之一从另一个视图控制器启动的。按钮点击发送 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)的原因吗?

我将不胜感激任何见解和帮助!

4

3 回答 3

0

你在这个委托方法中返回什么值: - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 确保它是 1

于 2013-06-24T06:51:28.427 回答
0

需要更多代码,即您创建和调用方法Myviewcontroller的部分addContentToArray。我认为您在那里为Myviewcontroller's 对象使用了发布代码,尝试隐藏该部分。

于 2013-06-23T06:26:20.607 回答
0

我设法通过编辑 initWithNibName 方法解决了这个问题(旧行注释掉了)

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {

    //self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    self = [super initWithNibName:@"PurposeCategoryViewController" bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

显然,它确实与我的视图控制器(称为 PurposeCategoryViewController)不是 PKRevealController 层次结构中的顶部/焦点视图控制器这一事实有关。所以,我只需要特别指出我的 nib 文件。

于 2013-06-23T10:08:55.300 回答