我正在使用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;
}
答案 0 :(得分:2)
然后您是否会尝试以更可靠的方式保留委托/ ds对象(比如将它保存在var / property数组/字典中)?我相信委托不应该被对象保留,可能会发生所有的reportContext都被释放。至少日志完全符合内存管理问题的情况,我相信你自己注意到了。