当尝试从自定义对象中获取属性时,Xcode拒绝编译

esq*_*qew 1 iphone xcode object objective-c

我最近一直在遇到这个问题.我有一个NSMutableArray调用tests,其中填充了我的自定义类的实例Test.我正在尝试使用以下方法访问属性:

return [tests objectAtIndex:row].name;
Run Code Online (Sandbox Code Playgroud)

但是,LLVM总是抛出错误并拒绝编译:

error: Semantic Issue: No member named 'name' in 'struct objc_object'
Run Code Online (Sandbox Code Playgroud)

我如何告诉编译器我将访问一个Test对象并让我编译该死的东西?

alb*_*amg 5

为了对属性使用点表示法,编译器需要知道对象的类型.

您可以发送消息:

return [[test objectAtIndex:row] name];
Run Code Online (Sandbox Code Playgroud)

或者您可以转换返回的值objectAtIndex::

return ((Test*)[tests objectAtIndex:row]).name;
Run Code Online (Sandbox Code Playgroud)

你可能想知道为什么.编译器需要知道对象的类型,因为属性可以指定任何方法是吸气剂或装定件,而不仅仅是默认对namesetName:,例如,这是通常与BOOL属性:

@property(getter=isEditable) BOOL editable;
Run Code Online (Sandbox Code Playgroud)

因此编译器需要知道这是什么属性才能生成正确的访问者调用.