设置表视图数据源和委托的适当方法

时间:2014-12-19 02:24:36

标签: ios objective-c uitableview uiviewcontroller

好的,所以我有tableview控制器1.在tableview控制器1的didSelectRowAtIndexPathMethod内部,我尝试使用表视图调用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时,它可以工作。但是当我设置表视图数据源和委托方法时,我感到很困惑,我得到一个返回UIApplicationMain(argc,argv,nil,NSStringFromClass([AppDelegate class])); EXC_BAD_ACCESS 我在这里做错了什么?

@interface FirstTVController : UITableViewController <UITableViewDataSource, UITableViewDelegate>

1 个答案:

答案 0 :(得分:0)

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

你必须有可能的选择:

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