我正在一个新的iOS Swift项目中使用Realm.我使用的是Xcode 6.0.1,iOS SDK 8.0和Realm 0.85.0

我正在try 使用新的领域主键功能,这样我就可以做addOrUpdateObject.

以下是一个示例模型:

import Foundation
import Realm

class Foo: RLMObject {
    dynamic var id = 0
    dynamic var title = ""

    func primaryKey() -> Int {
        return id
    }
}

以及我如何try 添加/更新新对象:

let foo = Foo()
foo.title = titleField.text
foo.id = 1

// Get the default Realm
let realm = RLMRealm.defaultRealm()

// Add to the Realm inside a transaction
realm.beginWriteTransaction()
realm.addOrUpdateObject(foo)
realm.commitWriteTransaction()

我得到了这个错误:

RLMExecption',原因:''Foo'没有主键,因此无法

这是主键上的文档.我可能没有正确设置:

最新的文档现在在这里:

推荐答案

primaryKey需要是一个返回主键属性名称的类函数,而不是一个返回主键值的实例方法.

@objcMembers class Foo: RLMObject {
    dynamic var id = 0
    dynamic var title = ""

    override class func primaryKey() -> String? {
        return "id"
    }
}

Swift相关问答推荐

在swift静态var扩展中,如何或可以访问和返回具体类?

如何避免使用DispatchSemaphores时线程爆炸?

try 在SwiftUI中做5星评级

";async let和";async之间的差异让我们等待";

在SWIFT中使用Objective-C struct 时出错(在作用域中找不到类型)

修改数组中每个类实例的属性

如何从 RC 加载场景作为 ModelEntity 而不是普通实体?

macOS 的窗口框架中使用的真实类型和真实类型是什么?

使用 WrappingHStack 文本溢出到新行

Swift-SceneKit-无法从art.scnassets加载.scn文件

如何在不提交到应用store 的情况下在本地运行我的应用

自定义 DispatchQueue 服务质量

响应 UITextField (UIViewRepresentable) 中的特定按键

Swift UI 不重绘 NSViewRepresentable 包装的文本字段

如何使 SwiftUI Picker 换行文本

Xcode:方法参数的代码完成

异步等待不会在项目中触发,但在 Xcode playground 中工作正常

macOS 守护进程应该由Command Line ToolXcode 模板制作吗?

是否可以在 Swift 中创建通用闭包?

try 在解除分配时加载视图控制器的视图... UIAlertController