通过setValue forKey将NSArray添加到CLBeaconRegion会导致错误

时间:2013-10-21 19:01:40

标签: objective-c exception nsarray ibeacon

是否可以通过CLBeaconRegion将数组添加到setValue forKey

我试图添加它:

[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.'

2 个答案:

答案 0 :(得分:1)

setValue:forKey:是一种KVC方法,基本上可用于每个类 - 但这并不意味着您可以只传递任何内容。你使用的密钥需要是一个现有的属性(嗯,实际上是一个被调用的方法,或一个处理不存在的密钥)。无论如何,重点是在尝试设置之前你应该知道密钥存在。

从技术上讲,您可以使用objc_setAssociatedObject将任意对象与其他对象相关联,但在这种情况下,我建议您改为使用majorminor属性来检查区域的用途在决定如何显示警报之前。

答案 1 :(得分:1)

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

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