2016-09-19 23 views
6

Sau nhiều rắc rối, cuối cùng tôi đã chuyển mã của mình thành Swift 3.0.ID tăng tự động trong Realm, Swift 3.0

Nhưng có vẻ như chức năng incrementID của tôi không hoạt động nữa?

Bất kỳ đề xuất nào về cách tôi có thể sửa lỗi này?

Hàm incrementID và primaryKey của chúng giống như lúc này.

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

func incrementID() -> Int{ 
    let realm = try! Realm() 
    let RetNext: NSArray = Array(realm.objects(Exercise.self).sorted(byProperty: "id")) as NSArray 
    let last = RetNext.lastObject 
    if RetNext.count > 0 { 
     let valor = (last as AnyObject).value(forKey: "id") as? Int 
     return valor! + 1 
    } else { 
     return 1 
    } 
} 

Trả lời

23

Không cần sử dụng KVC tại đây hoặc để tạo mảng được sắp xếp chỉ để nhận giá trị tối đa. Bạn chỉ có thể làm:

func incrementID() -> Int { 
    let realm = try! Realm() 
    return (realm.objects(Exercise.self).max(ofProperty: "id") as Int? ?? 0) + 1 
} 
+1

Tôi cảm thấy điều này có thể gây ra một số vấn đề. Nếu bạn xóa đối tượng id tối đa, sau đó thêm một đối tượng khác thì id của đối tượng mới sẽ giống với id của đối tượng đã xóa. –

+0

Vấn đề với id của đối tượng đã xóa là gì? Nó không có nghĩa là ID được sử dụng miễn phí? Nhưng đối với vấn đề hiệu suất, bạn chỉ nên truy vấn giá trị này một lần. –

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