0

我正在使用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 的键值编码”

我可以在中设置值(url)CLCircularRegion吗?

4

2 回答 2

1

Swift 不是 Javascript - 你不能在现有的类或结构上创建新属性,它继承的也没有属性CLCircularRegion,也没有.CLRegionmsgurl

您误解了setValue它的作用——它是基类上的一种方法,NSObject它允许通过引用其“名称”或键来设置类的现有属性。在 Swift 中不推荐使用它(它是 Objective-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
    }
}

ps不要使用'url'作为不是a的属性的名称URL- 称之为'urlString'或类似的名称。我只是用它来对应你问题的术语。

于 2018-02-22T09:22:08.837 回答
0

不,CLCircularRegion 没有名为 url 的属性,因此您不能在该类型的对象上设置 url。

于 2018-02-22T09:14:36.750 回答