2017-05-23 1 views
0

コードにいくつかの修正を加えて、ここでは、質問を再尋ねる:レルムスウィフトフィルター複数ViewControllers

私は銀河と呼ばれるクラスを持って、惑星

class Galaxy: Object { 
    let planets = List<Planet>() 
} 

class Planet: Object { 
    dynamic var capitol = String() 
    dynamic var council = String() 
    dynamic var collective = String() 
    dynamic var signals = String() 
} 

のリストと、各私は10を持っていますそれぞれがその銀河に特有の様々な惑星を持つ銀河を表している。特定の銀河の特定の惑星をどのようにフィルタリングできますか?

暗黙的にアンラップされたオプションのResults<Galaxy>!インスタンスをインスタンス化すると、私のAppDelegateにスターターデータがあるため、最初のGalaxy VCでコンパイルされます。 2番目のGalaxy VCでlet galaxy = Results<Galaxy>? = nilを実行すると、コレクションビューは空白になります。

データがないため、これは意味があります。

私はResultsオブジェクトをインスタンス化し、初期データのないビューコントローラごとにどのようにフィルタリングするのですか?

私はviewDidLoad()galaxies = realm.objects(Galaxy.self).filter("planets == %@", firstPlanet).sorted(byKeyPath: "capitol", ascending: false)を試みたが、このクラッシュ:

libc++abi.dylib: terminating with uncaught exception of type NSException

最後に、var galaxy = Results<Galaxy>()は例外cannot invoke initializer for type Results with no argumentsを発生させます。あなたのビューコントローラAの場合

+0

再質問_what_質問?既にStack Overflowに質問を投稿している場合は、他の投稿全体を作成するのではなく、必要に応じて編集することをお勧めします。または、異なるが関連する投稿を参照する場合、それにリンクすることも役に立ちます。 – jpsim

答えて

0

が選択された銀河からの惑星を通過し、セグエ方法のためにあなたのビューコントローラBで

var galaxies:[Galaxy] = realm.objects(Galaxy.self) 
var selectedGalaxyIndex = 0 
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { 
    if (segue.identifier == "segue_for_ViewController_B") { 
     // pass data to next view 
     let vc = segue.destination as viewControllerB 
     vc.planets = galaxies[selectedGalaxyIndex].planets 
    } 
} 

を準備なし初期データがありません場合は、レルムのクエリを

var planets:[Planet]? 
-1

を追加それはあなたが望むように見えます。例:あなたが見ているNSExceptionについては

class Galaxy: Object { 
    let planets = List<Planet>() 
} 

class Planet: Object { 
    dynamic var capitol = String() 
    dynamic var council = String() 
    dynamic var collective = String() 
    dynamic var signals = String() 
} 

let realm = try! Realm() 

let galaxies = realm.objects(Galaxy.self) 
print(galaxies.count) // => 0 

、私はそれはあなたが間違ってやっていることへとあなたを指示する必要がありますようあなたは、コンソールまたはログに印刷されたメッセージ全体を読むことをお勧め。あなたのコードの断片からは、firstPlanetがnilであることがあります。つまり、Listプロパティは決してゼロにならない可能性があるため、planets == nilは不正なクエリです。

関連する問題