2016-11-13 12 views
1

次の致命的なエラーが発生します。実行時にLInkingOjbectsを使用してレルムで致命的なエラーが発生する

fatal error: 'try!' expression unexpectedly raised an error: Error Domain=io.realm Code=1 "Schema validation failed due to the following errors: - Property 'GearModel.category' declared as origin of linking objects property 'CategoryRepository.gearList' links to type 'CategoryModel'" UserInfo={NSLocalizedDescription=Schema validation failed due to the following errors: - Property 'GearModel.category' declared as origin of linking objects property 'CategoryRepository.gearList' links to type 'CategoryModel', Error Code=1}:

ここでは、オブジェクトモデル:割り当てられたカテゴリを持つすべてのGearModel項目のリストを取得しようとすると:ギアモデルは、ONEのみカテゴリー

import Foundation 
import RealmSwift 

class GearModel: Object{ 

    dynamic var gearID = NSUUID().uuidString 
    dynamic var name = "" 
    dynamic var manufacturer = "" 
    dynamic var sortOrder = 0 
    dynamic var category: CategoryModel? 

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

カテゴリーのモデルに割り当てられています。

import Foundation 
    import RealmSwift 

    class CategoryModel: Object{ 

     dynamic var categoryID = NSUUID().uuidString 
     dynamic var sortOrder = 0 
     dynamic var name = "" 
     let gearList = LinkingObjects(fromType: GearModel.self, property: "category") 

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

カテゴリリポジトリクラス:致命的なエラーがライン上で発生サポートされていないallCategoriesに()LinkingObjects特性を有するクラスから継承

import Foundation 
import RealmSwift 

class CategoryRepository: CategoryModel{ 

    class func GetGearItemsForCategory(CategoryID: String) -> Results<GearModel> 
    { 
     let realm = try! Realm() 

     var gearItems = realm.objects(GearModel.self) 

     let predicate = NSPredicate(format: "categoryID = %@", CategoryID) 
     gearItems = gearItems.filter(predicate) 
     return gearItems 
    } 

    class func GetCountOfGearItems(CategoryID: String) -> Int 
    { 
     let realm = try! Realm() 

     var gearItems = realm.objects(GearModel.self) 

     let predicate = NSPredicate(format: "categoryID = %@", CategoryID) 
     gearItems = gearItems.filter(predicate) 
     return gearItems.count 
    } 

    class func AddCategory(CategoryID: String, Name: String, SortOrder: Int){ 

     let realm = try! Realm() 

     let category = CategoryModel(name: CategoryID, categoryID: Name, sortOrder: SortOrder) 

     try! realm.write { 
      realm.add(category) 
     } 
    } 

    class func allCategories() -> Results<CategoryModel> { 

     let realm = try! Realm() 


     return realm.objects(CategoryModel.self).sorted(byProperty: "SortOrder") 
    } 
+0

エラー 'Property' GearModel.categories '... 'は、カテゴリと呼ばれるGearModelに別のプロパティがあることを示しています。これはどこですか? – Michael

+0

良いキャッチ、私は、エラーに問題を解決する1つの試みからエラーでコピーしたが、エラーはコードと一致しませんでした。上記のコードで修正されました。私は関係を1から多少に変更しました。カテゴリがカテゴリに変わった理由しかし、それはどちらもうまくいきませんでした。 –

+0

'CategoryRepository'クラスも共有できますか? – Dmitry

答えて

0

FUNC "レルム= ....う"。

レルムのオブジェクトとリストのプロパティは共変ではなく、指定されたクラスだけを指すことができ、そのクラスのサブクラスは指し示すことができません。つまり、GearModel.categoryCategoryRepositoryオブジェクトにリンクできませんが、CategoryRepositoryは継承されたgearListプロパティを持ち、そのオブジェクトにリンクするGearModelオブジェクトをリストしようとしています。

具体的には、CategoryRepositoryCategoryModelから継承されている理由が明確ではありません。

+0

完全に正直なところ、私はSwiftには新しく、CategoryRepositoryコードはXamarinのチュートリアルに基づいており、そこで私は自分のデータストアとしてRealmを追加しました。私は今夜​​それを変更し、私たちが望むように答えがうまくいくはずであることをマークします。 –

関連する問題