2015-07-02 20 views
8

Tôi muốn di chuyển giản đồ lĩnh vực của mình sang phiên bản mới. Do đó, việc loại bỏ khóa chính của tôi là cần thiết.Di chuyển khóa chính của lĩnh vực

Cũ schema:

class StudyState : Object 
{ 
    dynamic var name = "" 
    dynamic var x = "" 
    dynamic var y = "" 

    override static func primaryKey() -> String? { 
    return "name" 
    } 
} 

New schema:

class StudyState : Object 
{ 
    dynamic var name = "" 
    dynamic var x = "" 
    dynamic var y = "" 
} 

Nếu không có di cư, vương quốc sẽ thất bại với

'RLMException', lý do: 'Di cư là cần thiết cho loại đối tượng 'StudyState' do các lỗi sau: - Prop erty 'name' không còn là khóa chính nữa '.

tôi đã cố gắng khối này di cư, mà thất bại quá:

migration.enumerate(StudyState.className()) { oldObject, newObject in 
    newObject?["deleted"] = false 
    newObject?["primaryKeyProperty"] = "" 
} 

'RLMException', lý do: 'tên thuộc tính không hợp lệ'

Có cách nào để loại bỏ khóa chính khi di chuyển lĩnh vực sang phiên bản giản đồ mới?

Trả lời

6

Bạn không cần phải làm bất cứ điều gì trong khối di chuyển nếu bạn chỉ xóa chú thích khóa chính. Nhưng cần phải tăng phiên bản lược đồ vì các định nghĩa lược đồ đã thay đổi.

Giống như dưới đây:

// You have to migrate Realm BEFORE open Realm if you changed schema definitions 
setSchemaVersion(1, Realm.defaultPath) { (migration, oldSchemaVersion) -> Void in 
    if oldSchemaVersion < 1 { 
     // Nothing to do! 
     // Realm will automatically detect new properties and removed properties 
     // And will update the schema on disk automatically 
    } 
} 

let realm = Realm() 
... 
+0

nhưng mà là "setSchemaVersion" từ đâu? – User9527

+0

@ User9527 Câu trả lời này dành cho phiên bản quá cũ. Trong phiên bản mới nhất, bạn có thể sử dụng 'Realm.Configuration' để chỉ định phiên bản lược đồ thay thế. Xem thêm https://realm.io/docs/swift/latest/#migrations –

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