2012-11-28 33 views
3

.H無法識別的選擇發送到類 - 靜態方法不帶參數

#import <Foundation/Foundation.h> 
#import "Person.h" 

extern NSString *const kRemindersWeekly; 
extern NSString *const kRemindersDaily; 

@interface Reminders : NSObject 

+(void)setRemindersForPerson: (Person*) person; 
+(void)setEightDayReminder; 

@end 

.M

#import "Reminders.h" 
@implementation Reminders 

NSString *const kRemindersWeekly = @"WEEKLY"; 
NSString *const kRemindersDaily  = @"DAILY"; 

+ (void) setRemindersForPerson: (Person*) person 
{ 
    // some code 
} 

+(void)setEightDayReminder 
{ 
    // some more code 
} 


@end 

當我打電話:

[Reminders setRemindersForPerson: p]; 

這一直工作正常。當我打電話:

[Reminders setEightDayReminder]; 

我得到:

+[Reminders setEightDayReminder]: unrecognized selector sent to class 0xe1b58 

此外,[Reminders setRemindersForPerson:];電話[Person setEightDayReminder]沒有任何問題。建立良好和命令點擊XCode中的功能顯示它。我認爲一切都按順序,因爲它將我帶到適當的地方。

必須缺少明顯的東西?!把我的頭髮拉出來。

+0

從那裏你叫setEightDayReminder方法崩潰時? – ophychius

+0

當你調用一個函數時使用self而不是提醒 –

+0

@Sharanya,它是一個靜態方法,self指的是一個不存在的實例。我在類,Reminders上調用靜態方法,而不是在實例'self' – ophychius

回答

1

有一個簡單的方法來調試它 - 在那裏放置一個斷點並觀察發生了什麼。

請參閱Creating breakpoint in Xcode for unrecognized selector如何爲無法識別的選擇器創建斷點。你的堆棧跟蹤應該告訴你你需要知道的一切。

也許您應該添加您的調用代碼。

2

我有一個非常類似的問題,原因是我有一個類別,我忘了在@implementation塊中指定類別,有效地用「新」替代原來的實現。

因此,如果你有類SomeClass的一個類別MyCategory,確保其實施的樣子:

@interface SomeClass (MyCategory) ... 

像:

@interface SomeClass ... 
相關問題