0

可能重复:
当从 UIStoryboard 实例化 ViewController 时,isMemberOfClass 返回 no

我最近偶然发现了一个奇怪的问题:

我正在实现简单的测试用例并使用 NSObject isMemberOfClass 方法来检查类是否相等。

另外我实现了一个自定义初始化:

-(id)initWithMessage:(NSString *)message

如果我用正确的类名替换 id,isMemberOfClass 将返回“YES”。否则会失败。

有趣的部分是:类方法每次都会返回正确的类。

这是一个错误吗?或者它应该以这种方式工作?

谢谢..

编辑:

好的,这并没有解决问题..这就是我要做的.. isMemberOfClass 将始终返回 NO

测试用例:

- (void)test010_broadcastWait
{
    ...
    GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:xmlData
                                                           options:0 error:&error];
    Brick *newBrick = [self.parser loadBroadcastWaitBrick:doc.rootElement];
    if (![newBrick isMemberOfClass:[BroadcastWaitBrick class]])
        STFail(@"Wrong class-member");
    ....
}

广播等待类:

导入“BroadcastWaitBrick.h”

@implementation BroadcastWaitBrick

-(id)initWithMessage:(NSString *)message
{
    self = [super init];
    if (self)
    {
        self.message = message;
    }
    return self;
}

...

加载方法:

-(BroadcastWaitBrick*)loadBroadcastWaitBrick:(GDataXMLElement*)gDataXMLElement
{


    NSArray *messages = [gDataXMLElement elementsForName:@"broadcastMessage"];
    GDataXMLElement *message = (GDataXMLElement*)[messages objectAtIndex:0];

    BroadcastWaitBrick* brick = [[BroadcastWaitBrick alloc]initWithMessage:message.stringValue];

    return brick;
}
4

1 回答 1

-3

isMemberOfClass在您的测试用例中返回NO,因为您将 newBrick var 声明为 Brick 类的成员。

在这种情况下,更好的选择是使用isKindOfClass方法或将 newBrick 声明为id.

于 2012-10-02T15:37:28.683 回答