2016-09-19 13 views
6

多くのトラブルの後、私は最終的に私のコードをSwift 3.0に変換しました。Realm、Swift 3.0の自動インクリメントID

しかし、私のincrementID関数がもう機能していないようですね?

どのように修正することができますか?

私のincrementIDとprimaryKeyは現在のように機能します。

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 
    } 
} 

答えて

23

ここでKVCを使用するか、ソートされた配列を作成して最大値を取得する必要はありません。あなたはできるだけ:

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

これはいくつかの問題を引き起こす可能性がありますように感じる。最大IDオブジェクトを削除してから別のオブジェクトを追加すると、その新しいオブジェクトのIDは削除されたオブジェクトのIDと同じになります。 –

+0

削除されたオブジェクトのIDにはどのような問題がありますか? IDは自由に使用できるという意味ではありませんか?しかし、パフォーマンスの問題では、この値を1回だけクエリする必要があります。 –

関連する問題