2017-05-23 54 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>!實例時,它在第一個Galaxy VC中編譯,因爲我的AppDelegate中有起始數據。當我在第二銀河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

+0

重新問_what_問題?如果您已經發布了一個問題堆棧溢出,這是最好,如果需要而作出修改,以一個比創造一個整體的其他職位。或者,如果引用不同但相關的帖子,則鏈接到它也會有所幫助。 – jpsim

回答

0

爲視圖控制器A通過從所選擇的銀河行星,用於賽格瑞方法制備

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

在視圖控制器B添加

var planets:[Planet]? 
-1

如果沒有初始數據,一個域的查詢將是空的,這似乎是你想要的。例如:

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 

至於你所看到的NSException,我建議你閱讀打印到控制檯或日誌整個消息,因爲這應該指導你爲你做錯了什麼。從你的代碼段,這可能是firstPlanet是零,這意味着planets == nil是非法查詢,因爲List財產永遠是零。