- 現(xiàn)在的理解是如果非全局的MVC/MVP的組裝,還是可以在Controller進(jìn)行組裝,畢竟是到用戶用得到你這個MVC/MVP的時候,這個MVC的生命周期才開始。
- 在MVC,MVP模式中,存在數(shù)據(jù)初始化的步驟,還有組裝的步驟,不屬于任何MVC,MVP任何一方。應(yīng)該作為全局變量?;蛘呤窃诔绦騿訒r組裝好各個部分。而之前的想法有一部分是對的。能在AppDelegate中解決全局變量的初始化問題。但直至現(xiàn)在,我還沒能找出組裝各個部分,而又使得這部分代碼離開這3方的方法。
- 然后昨晚的實驗貌似成功了。之前不懂得這3方面的組裝很有可能是因為不懂window,ViewController,storyboard的關(guān)系。所以沒能組裝。
我昨晚的組裝代碼:
// 在AppDelegate中聲明VC變量還有全局變量
var tableViewController:UITableViewController?
var globalArray:[ModuleData]?
// 在application函數(shù)中進(jìn)行初始化
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
customDataSource = CustomDataSource(cellIdentifier: "CustomCellID", configureCell: {(oneCellItem,cellData) in
let cell = oneCellItem as! CustomCell
cell.configureForCell(item: cellData as! ModuleData)
})
// 后面的是初始化VC的,用代碼的方式對Storyboard文件內(nèi)容進(jìn)行裝載。
tableViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "TableViewController") as! UITableViewController
tableViewController?.tableView.dataSource = customDataSource
var jj = tableViewController
printPointer(ptr:&jj!)
window?.rootViewController = UINavigationController(rootViewController: tableViewController!)
// 以這樣的方式能夠使得只初始化一個實例貌似是這樣子的。
// 這樣做的關(guān)鍵是能夠?qū)⒔M裝還有數(shù)據(jù)初始化的代碼和VC分開來。
// 我認(rèn)為組裝對了的原因是:1.我沒有再在其他地方對數(shù)據(jù)初始化,所以數(shù)據(jù)初始化是正確的。
// 2.我沒有再在其他地方將分出來的dataSource、CustomCell它們和VC進(jìn)行組裝。只有這個地方組裝起來,而且最終結(jié)果運行起來沒有問題。
return true
}
- 這里稍微補(bǔ)充一下之前糾結(jié)什么問題。
- 之前學(xué)MVC,遇到了問題是Module層數(shù)據(jù)的初始化我放在Controller層里面VC來初始化。但是它是Module層,不應(yīng)該和Controller層混在一起。
- 若將dataSource還有對Cell的定制的代碼從VC中分離出來。那么誰來將它們組裝在一起呢?怎么組裝呢?現(xiàn)在找到方法了,直接在AppDelegate中用上面的方式來初始化VC,組裝它們。就好了。
項目鏈接MVCDemo
// 這個項目是一個迷你的MVC模式項目,讓自己清晰它的結(jié)構(gòu)的一個項目。
// 遲點補(bǔ)充一篇關(guān)于window,storyboard,VC的關(guān)系,還有如果不是代碼進(jìn)行組裝的話,內(nèi)部流程是怎么樣子的。