2014-10-01 20 views
27

Tôi đang sử dụng Realm trong một dự án iOS Swift mới. Tôi đang sử dụng Xcode 6.0.1 với iOS SDK 8.0 và Realm 0.85.0Cách đặt khóa chính trong Swift cho mẫu Realm

Tôi đang cố gắng sử dụng tính năng chính của Khóa chính mới để tôi có thể thực hiện addOrUpdateObject.

Đây là một mô hình mẫu:

import Foundation 
import Realm 

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

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

Và làm thế nào tôi đang cố gắng để thêm/cập nhật một đối tượng mới:

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() 

tôi nhận được lỗi này:

RLMExecption', reason: ''Foo' does not have a primary key and can not be updated

Đây là các tài liệu trên khóa chính. Tôi có lẽ không đặt nó một cách chính xác: http://realm.io/docs/cocoa/0.85.0/api/Classes/RLMObject.html#//api/name/primaryKey

tài liệu mới nhất đang ở đây bây giờ: https://realm.io/docs/objc/latest/api/Classes/RLMObject.html#//api/name/primaryKey

+0

vỡ liên kết đến realm.io doc – styler1972

+0

Chúng tôi đã chuyển "cacao" của chúng tôi tài liệu để "objc" khi chúng tôi đưa ra Realm Swift, vì vậy hãy thử liên kết này thay thế: https://realm.io/docs/objc/latest/api/Classes/RLMObject.html#//api/name/primaryKey Chúng tôi đang thiết lập chuyển hướng từ liên kết cũ để điều này không gây ra nhiều nhầm lẫn trong tương lai. – jpsim

+0

Chuyển hướng từ liên kết cũ sang tài liệu mới dường như không hoạt động nên tôi đã cập nhật câu hỏi của mình bằng liên kết mới. – jeffjv

Trả lời

64

primaryKey nhu cầu trở thành một chức năng lớp mà trả về tên của tài sản đó là khóa chính, không một phương thức thể hiện trả về giá trị của khóa chính.

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

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

Cảm ơn, có những vấn đề của tôi. Ngoài ra, để có được nó làm việc tôi để thêm 'ghi đè' để ghi đè lên tuyên bố. – jeffjv

+0

Tôi đã cập nhật câu trả lời để bao gồm từ khóa "ghi đè" cần cho Realm để gọi chính xác chức năng lớp tùy chỉnh –

+0

Vì một số lý do tôi nhận được lỗi "redeclaration of 'primaryKey()' không hợp lệ. Có vẻ như không hiểu tại sao. – Entalpi

6

Kiểu trả về của primaryKey() là không bắt buộc:

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

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

Cảm ơn bạn đã thêm điều này, có vẻ như câu trả lời được chấp nhận đã thay đổi để phản ánh loại trả về tùy chọn. –

Các vấn đề liên quan