我正在用CLCircularRegion开发应用程序。
我想在CLCircularRegion中设置值。所以我做了region.setValue(forKey:key)但是它显示了
if CLLocationManager.locationServicesEnabled() {
for obj in pushInfoArr! {
let localLatiStr = obj["local_latit"] as! String
let localLongitStr = obj["local_longit"] as! String
let localMsg = obj["local_mesg"] as! String
let url = obj["cnnct_url"] as! String
let localLati = Double(localLatiStr)
let localLongi = Double(localLongitStr)
let center = CLLocationCoordinate2DMake(localLati!, localLongi!)
region = CLCircularRegion(center: center, radius: 1000, identifier: localMsg)
region.setValue(localMsg, forKey: "msg")
region.setValue(url, forKey: "url")
region.notifyOnEntry = true
self.locationManager.startMonitoring(for: region)
}
}“由于未指明的异常'NSUnknownKeyException‘而终止应用程序,原因:’setValue:forUndefinedKey:该类不符合键bb的键值编码‘”
我可以用CLCircularRegion设置值(Url)吗?
发布于 2018-02-22 09:22:08
Swift不是Javascript --您不能在现有的类或结构上创建新的属性,而且它继承的CLCircularRegion或CLRegion都没有属性msg或url。
您误解了setValue的作用--它是基类NSObject上的一种方法,它允许引用类的“名称”或键来设置类的现有属性。Swift不推荐使用它(这是一个目标-C遗留)。
您需要做的是创建一个包含区域和所需属性的结构或子类:
任一
struct MyRegion {
var region: CLCircularRegion
var msg: String
var url: String
}或
class MyRegion: CLCircularRegion {
var msg: String
var url: String
init(centre: CLLocationCoordinate2D, radius: Double, identifier: String, msg: String, url: String) {
super.init(centre: centre, radius: radius, identifier: identifier)
self.msg = msg
self.url = url
}
}附注:不要使用'url‘作为不是URL的属性的名称--称为'urlString’或其他类似的属性。我只是用它来对应你问题的术语。
发布于 2018-02-22 09:14:36
不,CLCircularRegion没有一个名为url的属性,因此不能对该类型的对象设置url。
https://stackoverflow.com/questions/48923155
复制相似问题