'isMemberOfClass'在自定义init时返回'NO'

时间:2012-10-02 14:59:25

标签: objective-c nsobject

  

可能重复:
  isMemberOfClass returns no when ViewController is instantiated from UIStoryboard

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

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

另外,我实现了一个自定义init:

-(id)initWithMessage:(NSString *)message

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

有趣的是:类Method每次都会返回正确的类。

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

谢谢..

编辑:

好的,这并没有解决问题..这就是我的工作.. 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");
    ....
}

BroadCastWait类:

导入“BroadcastWaitBrick.h”

@implementation BroadcastWaitBrick

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

...

loadMethod:

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


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

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

    return brick;
}

1 个答案:

答案 0 :(得分:-3)

测试用例中的

isMemberOfClass返回NO,因为您将newBrick var声明为类Brick的成员。

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