2014-03-06 75 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

相關問題