【问题标题】:Xcode 7.1: Property with retain or strong attribute must be of object typeXcode 7.1:具有保留或强属性的属性必须是对象类型
【发布时间】:2016-01-23 10:17:20
【问题描述】:

我在 swift 文件中有这个变量:

var adbk: ABAddressBook!

这一直很好,直到 Xcode 7.1。现在它抱怨“具有保留或强属性的属性必须是对象类型。”错误在-Swift.h 文件中。知道发生了什么变化会导致这个问题以及如何解决它吗?

【问题讨论】:

  • 您不应该存储一个 ABAddressBookRef 吗? ABAddressBook 是一个结构。要么摆脱!通过在 init 中分配它或使用 ?如果它可能没有设置。
  • 有时可能为零。我把它改成 ?仍然得到同样的错误。将其更改为 ABAddressBookRef 也无济于事。
  • 这可能是 Apple 迫使我过渡到 CNContactStore 的巧妙方式。
  • 你改成let或者private var怎么样,有什么区别吗?
  • 哦,太好了,private var 成功了!谢谢!

标签: xcode swift xcode7.1


【解决方案1】:

如果 Swift 类声明了一些 AdressBook 属性并且该类是混合 Swift / ObjC 项目的一部分,则会发生此错误。然后 Xcode 生成 Swift 桥接头,该属性变为 (nonatomic, strong),仅适用于对象,不适用于结构。

当我需要将 ABRecordRef 从 Objective-C 类传递给 Swift 类时,我遇到了类似的问题:Xcode 不喜欢我在 Swift 中的 ABRecordRef 属性。所以我最终将该属性设为私有,以便它不会导出到桥接头,并在 Swift 类中添加新方法来接收 ABRecordRef:

    class: PersonDetails {

       private var selectedPerson: ABRecorfRef?

       func setPerson(person: ABRecordRef) {
          selectedPerson = person
       }
    }

然后你就可以打电话了

[personDetails setPerson: person];

来自 Objective-C 类。

【讨论】:

    【解决方案2】:

    ABAddressBook 已弃用

    @available(iOS, introduced=2.0, deprecated=9.0, message="use CNContactStore")
    public typealias ABAddressBookRef = ABAddressBook
    

    所以我认为你必须使用 CNContactStore

    【讨论】:

      猜你喜欢
      • 2013-10-24
      • 1970-01-01
      • 2022-11-09
      • 2012-05-18
      • 2020-03-27
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多