0

重複の可能性:
UIStoryboardからViewControllerがインスタンス化されると、isMemberOfClassはnoを返します

私は最近、奇妙な問題に遭遇しました:

私は単純なテストケースを実装し、NSObjectisMemberOfClassメソッドを使用してクラスの同等性をチェックしていました。

さらに、カスタムinitを実装しました。

-(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");
    ....
}

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;
}
4

1 に答える 1

-3

isMemberOfClassNOnewBrick var をクラス Brick のメンバーとして宣言しているため、テスト ケースで返されます。

この場合のより良い選択は、isKindOfClassメソッドを使用するか、newBrick を として宣言することですid

于 2012-10-02T15:37:28.683 に答える