Ios 从委托调用时未输入协议方法

Ios 从委托调用时未输入协议方法,ios,delegates,protocols,Ios,Delegates,Protocols,我在应用程序中设置的协议和代理有一些问题。 我试图将一些数据从类返回到viewcontroller,但是当我试图将其发送回时,什么也没有发生。。。从不输入协议方法 我已经过了好几次设置它作为参考,只是看不到我在哪里出错,所以我想如果我分享我的代码,也许这里有人可以看到我不能看到的东西 这是我写的代码 发送类.h @protocol SearchViewCachedData <NSObject> - (void)sendMyArray:(NSArray *)array; @end //

我在应用程序中设置的协议和代理有一些问题。 我试图将一些数据从类返回到viewcontroller,但是当我试图将其发送回时,什么也没有发生。。。从不输入协议方法

我已经过了好几次设置它作为参考,只是看不到我在哪里出错,所以我想如果我分享我的代码,也许这里有人可以看到我不能看到的东西

这是我写的代码

发送类.h

@protocol SearchViewCachedData <NSObject>
- (void)sendMyArray:(NSArray *)array;
@end
//..
    __weak id <SearchViewCachedData> SearchViewDelegate;
//..
    @property (weak, nonatomic) id <SearchViewCachedData> SearchViewDelegate;
//..
@interface SearchViewController : UITableViewController <SearchViewCachedData> {
SearchView.h

@protocol SearchViewCachedData <NSObject>
- (void)sendMyArray:(NSArray *)array;
@end
//..
    __weak id <SearchViewCachedData> SearchViewDelegate;
//..
    @property (weak, nonatomic) id <SearchViewCachedData> SearchViewDelegate;
//..
@interface SearchViewController : UITableViewController <SearchViewCachedData> {

这里有点疯狂,所以任何帮助都将不胜感激。

我感觉您的代表没有做好准备

检查以确保将searchViewDelegate设置为实例值

if (self.searchViewDelegate != nil) {
    [self.searchViewDelegate sendArray:array];
}
还有。属性的第一个大小写应为小写。类别是大写的项目

修正案

它可能被代码中的另一部分设置为nil,或者您可能根本没有设置它

在合成代理的地方,也可以创建一个setter

@synthesize searchViewDelegate = _searchViewDelegate;
- (void) setSearchViewDelegate:(id<SearchViewCachedData>) searchViewDelegate{
    if (searchViewDelegate != searchViewDelegate){ // Add breakpoint here to see when set is called.
        searchViewDelegate = searchViewDelegate;
    }
}
@synthesis searchViewDelegate=\u searchViewDelegate;
-(无效)setSearchViewDelegate:(id)searchViewDelegate{
if(searchViewDelegate!=searchViewDelegate){//在此处添加断点以查看何时调用set。
searchViewDelegate=searchViewDelegate;
}
}

在哪里实例化和分配您的
SearchViewController
(或实现此协议的任何其他对象)?此外,以大写字母开头命名属性和变量会使代码更难理解,因为约定是以小写字母开头的。仅供参考。在if上添加一个断点并逐步执行。我想你的变量是零我应该把这段代码放在哪里对不起。。我的大脑在这个问题上已经崩溃了3个小时了…把它放在你调用sendArray:method的地方,用它来测试你的代理是否被填充。如果为nil,则不会命中sendArray:方法。它将跳过它。本质上,这是一个测试对象有效性的标准。如果是nil,它不会抱怨,它只会将消息发送给nil。任何发送给nil的消息都将导致nil。所以这个bug会隐藏起来。对。。因此,我添加了代码,并在if语句之前和内部放置了一个断点,它从未输入过。。这意味着它的权利??:P