【问题标题】:Create custom CLPlacemark for RideIntent为 RideIntent 创建自定义 CLPlacemark
【发布时间】:2017-09-14 11:23:18
【问题描述】:

我正在尝试使用 Intents 框架创建自定义 CLPlacemark。 我在文件开头导入“意图”。

我找到了这个解决方案:

let waypointLocation = CLLocation(latitude: 50.00, longitude: 8.00)
let waypointName = "Some Name"

let w1 = CLPlacemark.init(location: waypointLocation,
                                      name: waypointName,
                                      postalAddress: nil)

不幸的是,上面的代码给了我以下错误信息:

对成员“init(placemark:)”的模糊引用

有什么想法吗?

文档:

【问题讨论】:

    标签: ios swift core-location sirikit intents-extension


    【解决方案1】:

    刚刚发现在 iOS 12 / Xcode 10 中,您还必须包含联系人框架,因为 postaladdress 参数具有此初始化程序所需的 CNPostalAddress 类

    import Intents
    import Contacts
    

    【讨论】:

    • 要不是你的评论,永远不会发现!
    【解决方案2】:

    通过继承 CLPlacemark,可以使用 Intents 框架协议 init(location:name:postalAddress)

    在您的项目中的某处:

    class MyPlacemark: CLPlacemark {}
    

    创建自定义 CLPlacemark 的代码:

    let placeLocation = CLLocation(latitude: 50.00, longitude: 8.00)
    let placeName = "Some name"
    let customPlacemark = MyPlacemark(location: w1Location, name: w1Name, postalAddress: nil)
    

    【讨论】:

    • 我尝试了您的解决方案,但仍然遇到相同的错误 :( 您导入了什么框架?我尝试了 CoreLocation 和 Intents... 仍然是错误 :(
    【解决方案3】:

    你需要使用

    init(location:name:postalAddress);
    

    placemarkWithLocation 调用是 Objective-C 不迅速,​​因此它抛出该错误消息的原因。

    在文档中,您将在右侧看到语言选择。 init(location:name:postalAddress 是您创建新地标所需的快速调用。

    【讨论】:

      【解决方案4】:

      您也可以替换为 MKPlacemark,它会公开更多初始化程序(在 http://szulctomasz.com/2015/07/01/ios-unit-testing-in-swift-and-clplacemark-mocking.html 中找到)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-11
        • 2021-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多