表视图控制器委托是nil,但应该是有效的引用

时间:2012-08-21 03:54:04

标签: ios xcode delegates uitableview

我正在设计一个简单的Grocery List应用程序,但无法将Food实体添加到List实体。

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

此时我想在列表中看到这种食物,但没有任何反应。屏幕保持不变。在深入研究之后,我发现AddFoodToListTVC中的委托是nil,因此在按下“save”后没有屏幕返回。

然后我尝试使用以下代码手动设置委托:

`if(delegate == nil)

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


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

这将AddFoodToListTVC委托设置为某些东西,但我不确定如何验证我正确设置它。当我使用上面的添加运行我的应用程序时,单击保存时出现此错误。

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

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

我知道这些信息不多,但我可以提供任何相关代码。我的智慧结束了,如何正确设置AddFoodToListTVC的委托?

2 个答案:

答案 0 :(得分:0)

看起来你的app委托没有实现这个方法:theSaveButtonOnTheAddFoodToListTVCWasTapped:

答案 1 :(得分:0)

代表类似于委托对象 事件触发器 ......就像 rowWasSelected 是需要处理的事件某人是强制性方法....

现在你要设置 AppDelegate 作为代表的接收者对象 [self.delegate =(ListDetailTVC *)[[UIApplication sharedApplication] delegate];] .. 。

但是由于AppDelegate没有处理这些事件,你会得到一个例外 [无法识别的选择器] ......

首先是声明协议即, UITableViewDelegate UITableViewDataSource ... [协议就像只有声明没有实现的接口,你需要提供实现] Set tableViews DataSource 委派并实施这些协议。将解决您的问题