我用RESideMenu故事板示例項目在這裏下載https://github.com/romaonthego/RESideMenu但是我不知道我怎麼注入在AppDelegate中創建了managedObjectContext到主視圖控制器例如由RESideMenu顯示的HomeViewController。RESideMenu依賴注入
0
A
回答
1
首先,我的建議是爲了避免出現問題,如果你想使用DI不要用故事板。
如果你想使用它們,都是由故事板創建的視圖控制器,因此構造函數注入是不可能的,所以我假設你正在使用setter注入。
一個簡單的辦法是讓應用程序委託的的背景下,在您的視圖控制器的上下文吸氣這樣的:
// .h
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
// .m
- (NSManagedObjectContext *) managedObjectContext
{
if(_managedObjectContext == nil)
{
_managedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
}
return _managedObjectContext;
}
是的,這不是DI因爲視圖控制器正在尋找的範圍內,而不是請求因爲它不是很糟糕,它仍然允許你在測試中輕鬆地注入不同的上下文。
另一個解決方案是重寫instantiateViewControllerWithIdentifier:
在UIStoryboard子和注入的背景下出現的,但你會需要一些方法來檢查請求的視圖控制器需要上下文或沒有(你可以使用respondsToSelector:@selector(setManagedObjectContext) ),並且您還需要故事板子類中的上下文(您可以注入它或像上面的代碼中那樣訪問它)。檢查this question看到類似的方法,但使用Typhoon。
最後要說的是,在一個視圖控制器注入方面很容易出現最終擁有巨大的視圖控制器,我會注入其他模型對象的背景,然後注入這些在您的視圖控制器。
相關問題
- 1. 依賴注入
- 2. 依賴注入
- 3. 依賴注入
- 4. 依賴注入
- 5. 依賴注入
- 6. 依賴注入
- 7. 使用依賴注入來注入依賴注入器
- 8. 依賴注入Android
- 9. MVP依賴注入
- 10. NServiceBus依賴注入
- 11. WPF依賴注入
- 12. 依賴注入2.17
- 13. 依賴注入`trait`
- 14. MVVM依賴注入
- 15. AngularJS - 依賴注入
- 16. ui.bootstrap依賴注入
- 17. 依賴注入@protocol?
- 18. Wicket依賴注入
- 19. #botframework依賴注入
- 20. Spring依賴注入
- 21. C#依賴注入
- 22. 依賴注入akka.net
- 23. 依賴注入context.getbeans
- 24. 依賴注入wcf
- 25. Wcf依賴注入
- 26. MVC依賴注入
- 27. 依賴注入UserControl
- 28. 依賴注入與註解
- 29. 依賴注入註釋
- 30. 依賴注入解決循環依賴
感謝的建議,我認爲這個故事板似乎開始使用IOS開發(第一次嘗試在一個應用程序)的好辦法,但我看到你在DI限制方面的意思。我想我會回去做沒有故事板的一次。 當你說'我會在其他模型對象中注入上下文,然後將它們注入到視圖控制器中。我想最好的辦法是創建一個提供與上下文的基本查詢/功能注入到視圖控制器 –
關於故事板的一類,是品味的問題,事實上,他們有一些優點,但是是當它涉及到他們使事情變得更復雜一點。無論如何,像颱風這樣的工具可以幫助你,就像你在這個問題中看到的那樣。而且你對上下文是正確的,最好是讓其他類處理查詢和其他業務邏輯,以保持視圖控制器的完整性。 – e1985