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 の関数をクリックするとコマンドが表示されます。適切な場所に移動するので、すべてが順調に進んでいると思います。

明らかな何かが欠けているに違いない?! 髪を引っ張ります。

4

2 に答える 2

2

私は非常によく似た問題を抱えていました。その原因は、 @implementation ブロックでカテゴリを指定するのを忘れたカテゴリがあり、元の実装を「新しい」実装で効果的にオーバーライドしたことでした。

したがって、クラス SomeClass にカテゴリ MyCategory がある場合、その実装が次のようになっていることを確認してください。

@interface SomeClass (MyCategory) ...

そして好きではない

@interface SomeClass ...
于 2014-04-29T13:01:01.167 に答える
1

デバッグする簡単な方法が 1 つあります。そこにブレークポイントを置き、何が起こっているかを監視します。

認識されないセレクターのブレークポイントを作成する方法については、「 Xcode で認識されないセレクターのブレークポイントを作成する」を参照してください。スタック トレースは、知っておくべきことをすべて教えてくれるはずです。

おそらく、呼び出しコードも追加する必要があります。

于 2012-11-28T11:07:34.063 に答える