UITableViewController无法设置委托

时间:2019-01-21 14:15:07

标签: objective-c xcode uitableview delegates

只需将UITableViewController添加到情节提要

并将其类设置为名为CategoriesList的文件:-

ScreenShot 1:- enter image description here

ScreenShot 2:- enter image description here

@interface CategoriesList : UITableViewController {

    NSArray *CategoryArray;


}

@end

但是我不断得到

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

2 个答案:

答案 0 :(得分:0)

使用UITableViewController时,您无需指定delegatedataSource,因为这已在内部完成。换句话说,UITableViewController基本上由一个普通的UIViewController和一个UITableView组成,其中delegatedataSource已经设置为父控制器。苹果的文档中对此进行了说明:

  

UITableViewController的子类,当您的界面包含表视图且几乎没有其他内容时。 表视图控制器已经采用了管理表视图内容并响应更改所需的协议

因此,只需删除指向delegatedataSource的那些引用出口,就可以了。

答案 1 :(得分:0)

找到解决方案

问题是:

在UIViewController的prepareForSegue方法中,该方法具有UITableViewController的按钮,我正在将其他视图控制器的委托设置为self,而无需指定segue名称

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    AddMapAddress *MapAddress = [segue destinationViewController];
    MapAddress.delegate = self;
    MapAddress.AnnotationTitle = Name_Txt.text;

}

解决方案:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if ([[segue identifier] isEqualToString:@"MapSegue"]) {
    AddMapAddress *MapAddress = [segue destinationViewController];
    MapAddress.delegate = self;
    MapAddress.AnnotationTitle = Name_Txt.text;
    }

}