2013-10-21 27 views
1

是否可以通过setValue forKey将数组添加到CLBeaconRegion通过setValue forKey将NSArray添加到CLBeaconRegion导致错误

我试着添加:

[regionAdvert setValue:haveArray forKey:@"advertArray"]; 

但我只收到以下错误:

> Terminating app due to uncaught exception 'NSUnknownKeyException', 
> reason: '[<CLBeaconRegion 0x15379600> setValue:forUndefinedKey:]: this 
> class is not key value coding-compliant for the key advertArray.' 
+1

你想关联一个任意对象与该区域? – Wain

+0

所以,这是不可能的?我很困惑,因为Xcode向我暗示了这一点。 :S – Christian

+0

为什么不使用'major','minor'属性来标识区域? – Wain

回答

1

setValue:forKey:KVC方法是在每个班级基本上可用 - 但没有按这并不意味着你可以通过任何东西。你使用的密钥需要是一个现有的属性(嗯,真的是一个方法,因为这是被调用的,或处理不存在的密钥)。无论如何,重点在于在尝试设置密钥之前应该知道密钥的存在。

从技术上讲,你可以使用objc_setAssociatedObject与其他对象,但在这种情况下,相关的任意对象我会鼓励你,而不是使用majorminor性质决定如何显示您的警报之前,检查该地区的目的。

+0

Thx为您的答案。我怎样才能“设置”一个关键?我只知道它的方式。 – Christian

+0

您可以通过继承和添加属性来添加一个密钥... – Wain

+0

如果您向我展示一个示例,请介意吗? – Christian

1

不,你不能这样做。如果您想将其他数据与CLBeaconRegion关联,则可以使用其他数据结构,如NSDictionary。由于每个CLBeaconRegion都是用唯一的“标识符”字符串构造的,因此可以使用此标识符作为NSDictionary中的键来存储其他任意数据对象。

此外,你不应该改变一旦构建CLBeaconRegion。这些字段是不可变的。这并不是什么大不了的 - 只有三个领域。只需创建一个新的CLBeaconRegion,复制您希望保留的旧CLBeaconRegion中的任何标识符。

相关问题