从prepareForSegue:sender设置UITableView Delegate和DataSource时出错:

时间:2012-01-08 23:36:07

标签: iphone ios uitableview storyboard

我正在使用prepareForSeque:sender:动态设置UITableView的委托和dataSource属性,然后将其推送到导航堆栈。永远不会调用委托方法,Xcode会在下面返回错误。不幸的是,Xcode没有给我很多堆栈跟踪,唯一的指示是什么对象被用作数据源是UIViewControllerWrapperView的一个实例,我认为这可能是故事板库生成的。有任何想法吗?这甚至不可能吗?

错误:

  

* 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [UIViewControllerWrapperView   tableView:numberOfRowsInSection:]:发送到的无法识别的选择器   实例0x7f49370'

这是我的代码:

/**
 * Handle the various segues
 *
 * @author Jesse Bunch
 **/
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    // Get the selected cell
    NSIndexPath *selectedIndexPath = self.tableView.indexPathForSelectedRow;
    ReportTableViewCell *cell = (ReportTableViewCell *)[self.tableView cellForRowAtIndexPath:selectedIndexPath];

    // Instantiate the selected report's context
    // TODO: Insert error handling here
    Class reportClass = NSClassFromString([cell.reportInfo objectForKey:@"ReportClass"]);
    BaseReportContext *reportContext = [[reportClass alloc] init];
    reportContext.delegate = self;

    // Get the destination options controller
    ReportOptionsTableViewController *optionsController = (ReportOptionsTableViewController *)segue.destinationViewController;

    // Let the report context be the delegate of the options controller
    // The report context should contain all the information needed
    // to display the necessary report customization options
    optionsController.tableView.delegate = reportContext;
    optionsController.tableView.dataSource = reportContext;


}

1 个答案:

答案 0 :(得分:2)

然后您是否会尝试以更可靠的方式保留委托/ ds对象(比如将它保存在var / property数组/字典中)?我相信委托不应该被对象保留,可能会发生所有的reportContext都被释放。至少日志完全符合内存管理问题的情况,我相信你自己注意到了。