我使用NSValue来包装我定义的结构,但是当通过@property接收结构时,我收到此错误:请求的属性表达式的地址。
可以使用属性来完成,还是先将struct存储在变量中?
无效代码:
NSValue *previousTileObj = [NSValuevalue:&self.previousTile withObjCType:@encode(RobotTile)];
有效代码:
RobotTile localPreviousTile = self.previousTile;
NSValue *previousTileObj = [NSValuevalue:&localPreviousTile withObjCType:@encode(RobotTile)];
答案 0 :(得分:1)
您不能将调用结果的地址作为对象属性的访问者。
这是因为语句self.previousTitle
只是Objective-C消息调用[self previousTitle]
的语法糖,其语义类似于函数调用的语义,因为结果值在内存中没有真正的位置因此,它不能使用&
运算符获取其地址。
但是,您可以通过将访问者调用包装在C数组文本中来将结果欺骗到可寻址对象中。由于数组本质上是指向第一个元素的指针,因此会产生指向所需数据的指针。
NSValue *previousTileObj = [NSValue value:(RobotTile []){self.previousTile}
withObjCType:@encode(RobotTile)];
答案 1 :(得分:0)
您可以利用structure support in key-value coding并执行:
NSValue *previousTileObj = [self valueForKey:@"previousTile"];