【问题标题】:Appropiate way to set a tableviews datasource and delegate设置 tableview 数据源和委托的适当方法
【发布时间】:2014-12-19 02:24:36
【问题描述】:

好的,所以我有 tableview 控制器 1。在 tableview 控制器 1 的 didSelectRowAtIndexPathMethod 内部,我尝试根据数据是否需要调用带有 table view 的 popOver,如下所示:

UIViewController *popoverContent=[[UIViewController alloc] init];
        UITableView *tableView=[[UITableView alloc] initWithFrame:CGRectMake(265, 680, 0, 0)    style:UITableViewStylePlain];

    UIView *popoverView=[[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 300)];

    popoverView.backgroundColor=[UIColor whiteColor];


    FirstTVController * firstTV = [[FirstTVController alloc]init];

   // popOver.keyId = model.key_id;
    popoverContent.view=popoverView;
    popoverContent.contentSizeForViewInPopover=CGSizeMake(200, 420);

    [tableView setDelegate:firstTV];
    [tableView setDataSource:firstTV];

    popoverContent.view=tableView; //Adding tableView to popover

    UIPopoverController *popoverController=[[UIPopoverController alloc]    initWithContentViewController:popoverContent];
    [popoverController presentPopoverFromRect:CGRectMake(340, 400, 0, 0) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];

现在,当我更改 tableview 数据源并将其委托给 self 时,它可以工作。但是我很困惑,当我设置表视图数据源和委托方法时,我得到一个 return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); EXC_BAD_ACCESS 我在这里做错了什么?

@interface FirstTVController : UITableViewController <UITableViewDataSource, UITableViewDelegate>

【问题讨论】:

    标签: ios objective-c uitableview uiviewcontroller


    【解决方案1】:

    firstTV 在此方法结束时超出范围。所以表视图的数据源和委托属性指向了一个无效的对象。

    你必须有可能的选择:

    1. firstTV 设为实例变量,这样它就不会超出范围。
    2. 更好的方法是使用扩展UITableViewController 的自定义类来清理问题中的所有代码。没有理由创建一个通用的UIViewController,向其中添加您自己的表视图,然后使用另一个类作为表的数据源和委托。将所有这些整合到一个班级中。

    【讨论】:

      猜你喜欢
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 2017-02-18
      • 2015-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多