关于C#:发送到类的无法识别的选择器 – 用于没有参数的静态方法

unrecognized selector sent to class - for static method with no parameters

H

1
2
3
4
5
6
7
8
9
10
11
12
#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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#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

当我呼叫:

1
[Reminders setRemindersForPerson: p];

这个工厂总是好的。当我呼叫:

1
[Reminders setEightDayReminder];

我得到的:

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

也没有任何问题,[Person setEightDayReminder][Reminders setRemindersForPerson:];调用。建立精细clicking在线函数在Xcode和命令显示它。我认为一切都是为了我的需要的适当的地方。

丢失的东西必须是明显的?!!!!!!!我的头发拉出来。


我遇到了一个非常类似的问题,原因是我有一个类别,在这个类别中,我忘记在@implementation块中指定类别,有效地用"new"替代了原始实现。

因此,如果在类SomeClass上有一个类别MyCategory,请确保其实现如下所示:

1
@interface SomeClass (MyCategory) ...

而不是像:

1
@interface SomeClass ...

调试它有一个简单的方法——在那里放置一个断点并观察正在发生的事情。

有关无法识别的选择器,请参见在Xcode中创建断点。如何为无法识别的选择器创建断点。您的堆栈跟踪应该告诉您需要知道的一切。

也许您也应该添加您的调用代码。