表视图控制器委托为零,但应为有效引用



我正在设计一个简单的Grocery List应用程序,但在向List实体添加Food实体时遇到了问题。

事件顺序:ListDetailTVC->AddFoodToListTVC->键入食物名称->保存

在这一点上,我想在列表中看到这种食物,但什么也没发生。屏幕保持不变。经过深入研究,我意识到AddFoodToListTVC中的委托为零,因此在按下"保存"后没有可返回的屏幕。

然后我尝试用以下代码手动设置代理:

`if(delegate == nil)
   {
        self.delegate = (ListDetailTVC *)[[UIApplication sharedApplication] delegate];
    }

NSLog(@"delegate = %@", delegate);
`

这将AddFoodToListTVC委托设置为某个值,但我不知道如何验证Im设置是否正确。当我使用上面的添加运行我的应用程序时,当我单击保存时会出现此错误。

由于未捕获的异常"NSInvalidArgumentException"而终止应用程序,原因:"-AppDelegate theSaveButtonOnTheAddFoodToListTVCWasTapped:]:发送到实例0x6b56610'的无法识别的选择器"

0x6b56610在这种情况下是我手动设置的代表的地址。

我知道这不是太多信息,但我可以提供任何相关的代码。我束手无策,如何正确设置AddFoodToListTVC的委托?

您的应用程序代理似乎没有实现此方法:SaveButtonOnTheAddFoodToListTVCWasTapped:

委托类似于事件触发器,由委托对象接收。。。类似于rowWasSelected是一个需要由强制方法的人员处理的事件。。。。

现在的问题是,您将AppDelegate设置为delegates的接收器对象[self.delegate=(ListDetailTVC*)[[UIApplication sharedApplication]delegate];]。。。

但是由于AppDelegate不处理这些事件,您会得到一个异常[无法识别的选择器]。。。

因此,第一件事是声明协议,即UITableViewDelegateUITableViewDataSource。。。[协议就像只有声明而没有实现的接口,您需要提供实现]设置tableViewsDataSourceDelegate并实现这些协议。将解决您的问题

最新更新