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
对象并让我编译该死的东西?
为了对属性使用点表示法,编译器需要知道对象的类型.
您可以发送消息:
return [[test objectAtIndex:row] name];
Run Code Online (Sandbox Code Playgroud)
或者您可以转换返回的值objectAtIndex:
:
return ((Test*)[tests objectAtIndex:row]).name;
Run Code Online (Sandbox Code Playgroud)
你可能想知道为什么.编译器需要知道对象的类型,因为属性可以指定任何方法是吸气剂或装定件,而不仅仅是默认对name
和setName:
,例如,这是通常与BOOL
属性:
@property(getter=isEditable) BOOL editable;
Run Code Online (Sandbox Code Playgroud)
因此编译器需要知道这是什么属性才能生成正确的访问者调用.