0

我正在尝试访问方法如下所示的实现文件中的对象: - (Boolean)humanIsAlive:(id)humanobj;但是,Xcode 抱怨不存在这样的对象并且构建失败。

在主文件中main.m,我会在函数中写下这个main()

int main(int argc, const char * argv[]) {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    Human *human = [[Human alloc] init];
    MyHuman *myhuman = [[MyHuman alloc] init];

    [human create:@"John Doe" age:25];
    if ([human humanIsAlive:myhuman]) {
        NSLog(@"%@ is alive and well.", myhuman.humanName);
    } else {
        NSLog(@"%@ is dead and gone.", myhuman.humanName);
    }

    [pool drain];
    return 0;
}

这是 Xcode 抱怨的代码:

- (Boolean)humanIsAlive:(id)humanobj {
    if (humanobj.living == YES) {
        return YES;
    }
    return NO;
}

这似乎是合法的,但 Xcode 抱怨这个对象中不存在这样的属性并且不存在这样的对象。

帮助?

4

1 回答 1

1

具有类型的对象的属性id不能安全地解析为任何一个对象的实例方法,因此它们被语言禁止。此外,如果您可以为其id自身添加属性,那么我们将使用一种搞砸的语言。

您需要做的只是更具体:

- (BOOL) humanIsAlive:(MyHuman*)humanobj { //... }

如果您绝对需要处理两种不同类型的对象,请对它和使用更安全一点-isKindOfClass:,然后在适当的地方转换对象以使用它的属性。

于 2013-03-26T20:35:55.027 回答