【问题标题】:prepareForSegue and setting property settingprepareForSegue 和设置属性设置
【发布时间】:2012-06-30 08:40:04
【问题描述】:

我有一个 UITableViewController 显示默认的单元格。可以触摸每个单元格并将其带到第一个视图中每个单元格所拥有的“帐户”内的列表中。

我用一个 segue 连接所有东西,然后在我的第一个视图中我调用:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"showDetail"]) {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        Account *nextAccount = [self.list objectAtIndex:indexPath.row];
        DetailViewController *viewController = (DetailViewController *)[segue destinationViewController];
        viewController.account = nextAccount;
    } 
}

然后在详细视图的 viewDidAppear:(BOOL)animated 我说:

 - (void)viewDidAppear:(BOOL)animated {
self.list = [self.account.list mutableCopy];
}

然后我在详细视图上有一个 UITableViewController 但在 cellForRowAtIndexPath: 方法中我访问了 self.list 但它似乎不起作用。我知道我的 cellForRowAtIndexPath: 有效,因为之前我使用该方法做了一些模板工作并且效果很好。似乎只是 prepareForSegue: 不起作用或属性未设置。

提前致谢!

【问题讨论】:

    标签: uitableview ios5 properties storyboard segue


    【解决方案1】:

    它可能在调用 viewDidAppear 之前很久就尝试设置详细表视图。而是尝试覆盖数据模型的设置器:

    -(void)setList:(List*)list    // or whatever type list is
    {
        if (_list != list) {
            _list = [list mutableCopy];
        }
    }
    

    然后它应该在加载视图之前创建副本。

    此外,如果您要覆盖 viewDidAppear,请务必调用 super:

    [super viewDidAppear];
    

    【讨论】:

      【解决方案2】:

      使用 NSLog 并检查每个元素是否 != nil。 (nextAccount 等)Objective C 很乐意让您向 nil 对象发送消息而不会抛出错误消息。

      还要在你的 segue 条件语句中添加一个日志语句,以确保它被调用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-16
        • 1970-01-01
        相关资源
        最近更新 更多