这是在使用Three20的情况下,但可能更多地涉及到我没有得到的目标C.我在TTTableLinkedItemCell
并且只是尝试分配一个名为readAt
的属性。
//_item.readAt = [[NSDate alloc] init];
“请求成员'readAt'在非结构或联合的东西中”
[_item setReadAt: [[NSDate alloc] init]];
按预期工作。然后...
((NotificationItem *)_item).readAt = [[NSDate alloc] init];
也有效。似乎我需要使用点符号进行转换,但Obj-C会愉快地盲目地传递消息吗?这是我正在采取的正确规则吗?
根据Three20 API, PS:_item
为:TTTableLinkedItem * _item
。
答案 0 :(得分:2)
编译器需要知道对象的类型才能使用点表示法来访问属性 - 只有在对象没有静态输入时才需要进行转换。消息发送对任何对象都有效,因此只要变量具有某种对象类型,它就会起作用。
那么为什么需要知道属性访问器的静态类型呢?因为属性可以将任何方法指定为getter或setter,而不仅仅是foo
和setFoo:
的默认对,因此编译器需要知道这是什么属性才能生成正确的访问器调用
答案 1 :(得分:1)
This page处理相关问题,虽然这是关于你自己的课程。有人提到,为了使编译器在使用子类时能够识别超类的属性,子类的实现文件必须导入超类的头文件。
似乎TTTableLinkedItemCell不会执行此操作,因此您无法使用强制转换或使用正常的消息语法。两者都不理想,但它有点不受你的控制。