我正在研究Objective-C。如果我理解正确,请使用以下代码:
id data;
myClass = [[NSObject alloc]init];
data = myClass;
将myClass
个实例分配给data
,因此,我可以使用data
,就像我可以使用myClass
一样。
以下代码正常运行:
data = myClass;
[data methodBelongToMyClass];
但是我无法访问该类的属性。请看一下(分子是myClass的属性):
myClass.numerator = numerator * dataValue.denominator;
由于错误导致它崩溃(实际上甚至没有运行) - Property denominator not found on object of type '__strond id'
是的,我理解它有点不言自明,但是,我已经将类实例分配给了我的id对象,为什么我无法访问属性?
感谢任何帮助和解释,谢谢!
答案 0 :(得分:1)
这是因为data
是id
类型而不是NSObject
。
编译器不知道id data
中的数据类型,因此无法引用它。
如果你创建一个铸件,即
id data = MyCalss;
NSObject *object = (NSObject *)data;
您可以访问班级中的内部数据。
答案 1 :(得分:1)
我对你的问题感到有些困惑,但我会尽力回答。
因为ID被认为是"任何"它不知道属性,除非你将它转换为你设置它的对象类型。但是你可以这样做。
[data valueForKey@"propertyName"]
使用id可能非常强大,但在尝试调试时也会被滥用并给你带来很多麻烦。
希望有所帮助。