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]代码>
self.delegate
类型id
的问题,但不符合相关协议。请参见上面的编辑。@LeoNatanid
是一种类型。它位于iOS 7.0.4 SDK第46行的objc.h中。@LeoNatan如果您知道答案,请发布一个答案。谢谢你。@B请把你的答案放回原处。这是正确的。Leo搞错了。这看起来像是self.delegate
类型id
的问题,但不符合相关协议。请参见上面的编辑。@LeoNatanid
是一种类型。它位于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];
}