2014-03-06 77 views
0

我收到上述错误,我不知道为什么。当错误被标记的行是:没有已知的选择器实例方法 - 委托问题?

- (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 

和方法在委托对象中实现这样的:

-(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]; 

} 

可有人请指出我的错误?

编辑:

确实是有一个命名问题(我是从一个测试应用程序中粘贴)。不过,我已经改正了,我相信,像这样:

@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]; 

} 

仍然得到错误。

构建失败,即使有断点由@Leo建议

+1

@bneely把你的答案回来。这是正确的。狮子座是错误的。 – rmaddy

+0

这看起来像'self.delegate'类型'id'的问题,而不符合相关协议。 – bneely

+0

请参阅上面的修改。 – rattletrap99

回答

4

有几个问题与您的代码:

  • 你的协议定义方法名无字活动,但你实现定义的方法名与单词活动,所以这些方法名称不匹配。您可以依靠完成或复制粘贴来实现协议方法,并确保方法签名匹配。
  • self.delegate

    可以简单地是id类型,它不符合特定的协议。编译器无法知道self.delegate可以响应您的协议方法。更改该行:

    [(id<AddActivityViewControllerDelegate>)self.delegate addActivityViewControllerDidCancel:self.thisActivity];

+1

id绝对是一个类型:** objc.h **:'typedef struct objc_object * id;' – bneely

+0

请参阅上面的修改。 – rattletrap99

+0

@TimJones您是否尝试过在第二个项目符号中对您的代码进行编辑建议? – bneely

相关问题