我正在使用带Firebase身份验证的基于情节提要/ objective-c的iOS应用程序。我使用Cloud Firestore保存用户数据-年龄,性别等。当用户到达应用程序时,我检查用户是否登录了以下(类似)代码
FIRUser *firUser = [FIRAuth auth].currentUser;
if (firUser) {
// user logged in
// fetch updated user date from cloud firestore
} else {
// NO logged in user
}
用户登录后,他们可以导航到应用程序的其他部分,否则他们会看到注册/登录页面。
它的外观导航到不同的视图通常意味着我必须调用上面的代码来再次确定已登录状态-我不想这样做。我想创建一个具有登录用户和来自Firestore的数据的用户对象,并将其在视图控制器之间传递。
Singleton似乎做得很好,并且很适合我的情况,但是我遇到了台风!
第一个问题是,使用该框架还可以吗?似乎有些不活跃,但技术却非常惊人。
第二个是我的实现-我有一个看起来像这样的程序集
- (AuthenticatedUser*)authenticatedUser {
return [TyphoonDefinition withParent:[self user] class:[AuthenticatedUser class] configuration:^(TyphoonDefinition* definition){
definition.scope = TyphoonScopeSingleton;
}];
}
这就是我获取AuthenticatedUser实例的方式
ModelsAssembly *modelsAssembly = [ModelsAssembly defaultAssembly];
// no default ModelsAssembly set
if( modelsAssembly == nil ){
modelsAssembly = [[ModelsAssembly new] activated];
[modelsAssembly makeDefault];
}
authenticatedUser = [modelsAssembly authenticatedUser];
要在不同的视图中获取同一启动的类,我需要执行以下操作:
我想知道是否有人可以为此提供一些指导。
答案 0 :(得分:0)
第一个问题是,使用该框架还可以吗?似乎有些不活跃,但是却是非常了不起的技术。
答案:
对于Objective-C,台风仍然是依赖注入库的最佳选择。它功能齐全,因此通常不添加新功能,但是由AppsQuick.ly维护和支持。
如果您使用的是Swift,Fiery Crucible是一个出色的DI框架。它具有Typhoon的大多数功能,易于使用,并且没有其他Swift框架的缺点。
要在不同的视图中获取同一启动的类,我需要执行以下操作:
- 使用TyphoonScopeSingleton作为装配体中的definition.scope
- 将程序集设为默认值
我想知道是否有人可以为此提供一些指导。
答案:
这不是正确的方法。这个想法是让Typhoon的一个 实例在composition root上创建,然后在运行中的应用程序(前景应用程序或后台应用程序)中与应用程序一起使用。
对于iOS,Typhoon提供了一种在启动时引导程序集的方法,无论有无故事板。 sample以及情节提要板上的this guide显示了如何执行此操作。
如果尝试了上述资源后仍然遇到其他障碍,请询问其他特定问题。