Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 选择器没有已知的实例方法--委托问题?_Ios_Delegates_Protocols - Fatal编程技术网

Ios 选择器没有已知的实例方法--委托问题?

Ios 选择器没有已知的实例方法--委托问题?,ios,delegates,protocols,Ios,Delegates,Protocols,我得到了上面的错误,我不知道为什么。标记错误的行为: - (IBAction)cancelButton:(UIBarButtonItem *)sender { [self.delegate addActivityViewControllerDidCancel:self.thisActivity]; } 我很困惑,因为这个方法似乎没有问题,紧接着: - (IBAction)saveButton:(UIBarButtonItem *)sender ...

我得到了上面的错误,我不知道为什么。标记错误的行为:

- (IBAction)cancelButton:(UIBarButtonItem *)sender
{    
    [self.delegate addActivityViewControllerDidCancel:self.thisActivity];
}
我很困惑,因为这个方法似乎没有问题,紧接着:

- (IBAction)saveButton:(UIBarButtonItem *)sender
...          
    [self.delegate addViewControllerDidSave];
}
...       
}
我的协议在关联的头文件中声明如下:

@protocol AddActivityViewControllerDelegate <NSObject>

-(void) addViewControllerDidSave;

-(void) addViewControllerDidCancel:(WMDGActivity *) activityToDelete;

@end
有人能指出我的错误吗

编辑:

确实存在命名问题(我是从测试应用程序粘贴进来的)。然而,我已经纠正了它,我相信,就像这样:

@protocol AddActivityViewControllerDelegate <NSObject>

-(void) AddActivityViewControllerDidSave;

-(void) AddActivityViewControllerDidCancel:(WMDGActivity *) activityToDelete;

@end

仍然有错误


即使使用@Leo建议的断点,构建也会失败。您的代码有几个问题:

  • 您的协议定义的方法名称中没有单词Activity,但您的实现定义的方法名称中有单词Activity,因此这些方法名称不匹配。您可以依靠完成或复制粘贴来实现协议方法,并确保方法签名匹配
  • self.delegate
    可能只是类型
    id
    ,不符合特定协议。编译器无法知道
    self.delegate
    可以响应您的协议方法。将该行更改为:

    [(id)self.delegate addActivityViewControllerIDCancel:self.thisActivity]


您的代码有几个问题:

  • 您的协议定义的方法名称中没有单词Activity,但您的实现定义的方法名称中有单词Activity,因此这些方法名称不匹配。您可以依靠完成或复制粘贴来实现协议方法,并确保方法签名匹配
  • self.delegate
    可能只是类型
    id
    ,不符合特定协议。编译器无法知道
    self.delegate
    可以响应您的协议方法。将该行更改为:

    [(id)self.delegate addActivityViewControllerIDCancel:self.thisActivity]



@b请把你的答案放回原处。这是正确的。Leo搞错了。这看起来像是
self.delegate
类型
id
的问题,但不符合相关协议。请参见上面的编辑。@LeoNatan
id
是一种类型。它位于iOS 7.0.4 SDK第46行的objc.h中。@LeoNatan如果您知道答案,请发布一个答案。谢谢你。@B请把你的答案放回原处。这是正确的。Leo搞错了。这看起来像是
self.delegate
类型
id
的问题,但不符合相关协议。请参见上面的编辑。@LeoNatan
id
是一种类型。它位于iOS 7.0.4 SDK第46行的objc.h中。@LeoNatan如果您知道答案,请发布一个答案。谢谢.id绝对是一个类型:objc.h:
typedef struct objc_object*id@TimJones你在第二个要点中尝试过我建议的对代码的编辑吗?@b我一直认为这是一个运行时exception@TimJones慢下来,花点时间校对。检查协议中方法名称的大小写、如何调用这些方法以及如何实现这些方法。确保三个都匹配。就是这样,@rmaddy!我简直不敢相信,但当我回顾我的步骤时,最初的问题是bneely看到的,协议和方法之间名称的差异。我通过从协议声明中选择并复制“AddActivity”并粘贴它来替换原始方法声明中的“add”来纠正这一点。这修复了拼写,但引入了大小写问题,引发了相同的异常。很抱歉占用了你这么多时间!我认为给B一个绿色的复选标记并投赞成票是恰当的,但感谢所有人!id绝对是一个类型:objc.h:
typedef struct objc_object*id@TimJones你在第二个要点中尝试过我建议的对代码的编辑吗?@b我一直认为这是一个运行时exception@TimJones慢下来,花点时间校对。检查协议中方法名称的大小写、如何调用这些方法以及如何实现这些方法。确保三个都匹配。就是这样,@rmaddy!我简直不敢相信,但当我回顾我的步骤时,最初的问题是bneely看到的,协议和方法之间名称的差异。我通过从协议声明中选择并复制“AddActivity”并粘贴它来替换原始方法声明中的“add”来纠正这一点。这修复了拼写,但引入了大小写问题,引发了相同的异常。很抱歉占用了你这么多时间!我认为给B一个绿色的复选标记并投赞成票是恰当的,但感谢所有人!
@protocol AddActivityViewControllerDelegate <NSObject>

-(void) AddActivityViewControllerDidSave;

-(void) AddActivityViewControllerDidCancel:(WMDGActivity *) activityToDelete;

@end
- (IBAction)saveButton:(UIBarButtonItem *)sender

{
...
    [self.delegate AddActivityViewControllerDidSave];
...
}
- (IBAction)cancelButton:(UIBarButtonItem *)sender
{    
    [self.delegate addActivityViewControllerDidCancel:self.thisActivity];
}
-(void) addActivityViewControllerDidSave
{
    NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];
    [localContext MR_saveToPersistentStoreAndWait];
    [self.navigationController dismissViewControllerAnimated:YES completion:nil];
    [self refreshData];

}

-(void) addActivityViewControllerDidCancel:(WMDGActivity *) activityToDelete
{
    [activityToDelete MR_deleteEntity];
    [self.navigationController dismissViewControllerAnimated:YES completion:nil];
    [self refreshData];

}