首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RESideMenu依赖注入

RESideMenu依赖注入
EN

Stack Overflow用户
提问于 2014-04-20 12:28:23
回答 1查看 145关注 0票数 0

我在这里使用了RESideMenu故事板示例项目下载,但是我不知道如何将在AppDelegate中创建的managedObjectContext注入主视图控制器,例如RESideMenu显示的HomeViewController。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-20 17:29:47

首先,我的建议是避免出现问题,如果您想使用DI,不要使用故事板。

如果您想使用它们,视图控制器是由情节提要创建的,因此构造函数注入是不可能的,所以我假设您使用的是setter注入。

一个简单的解决方案是在视图控制器的上下文getter中获取应用程序委托的上下文,如下所示:

代码语言:javascript
复制
// .h

@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;

// .m

- (NSManagedObjectContext *) managedObjectContext
{
    if(_managedObjectContext == nil)
    {
        _managedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
    }

    return _managedObjectContext;
}

是的,这不是DI,因为视图控制器正在寻找上下文,而不是请求上下文,但并不是很糟糕,它仍然允许您在测试中轻松地注入不同的上下文。

另一种解决方案是在您的respondsToSelector:@selector(setManagedObjectContext)),子类中重写instantiateViewControllerWithIdentifier:并在那里注入上下文,但是您需要某种方式来检查请求的视图控制器是否需要上下文(您可以使用UIStoryboard,也可以在情节提要子类中使用上下文(您可以像上面的代码那样注入它或访问它)。检查这个问题以查看类似的方法,但使用台风

最后要说的是,在视图控制器中注入上下文很容易最终产生巨大的视图控制器,我会在其他模型对象中注入上下文,然后在视图控制器中注入上下文。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23181972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档