我在用户的nsuserdefaults中存储了几个对象,我必须在我的应用程序的每个ViewController中或多或少使用它们。
当前,我基本上有相同的3个变量,在ViewDidload中,我像以下内容一样初始化它们:
if(....){
chosenID = [[[NSUserDefaults standardUserDefaults] valueForKey:@"chosen_xxxx"] integerValue];
chosenName = [[NSUserDefaults standardUserDefaults] valueForKey:@"chosen_name"];
}else{
chosenID = [[[NSUserDefaults standardUserDefaults] valueForKey:@"chosen_xxxx_2nd option"] integerValue];
...
}
我希望清理我的代码并优化代码,我想知道如何处理这样的案例的正确方法,以避免在开始时拥有这10-12行完全相同的代码行每个ViewController。
写一个实用程序类。并创建一些类方法。
一种方法可以像,
+ (NSString *)choosenName {
return [[NSUserDefaults standardUserDefaults] valueForKey:@"chosen_name"];
}
并调用类似的方法,
chosenName = [Your_Utility_Class choosenName];
是的,您可以通过以下简单方法在全球实现它。
.h文件
//Setting up Session
+(void)SetEmail:(NSString*)value;
+(void)SetFirstName:(NSString*)value;
//Retrieve
+(NSString*)GetEmail;
+(NSString*)GetFirstName;
.m文件
+(void)SetEmail:(NSString *)value{
[[NSUserDefaults standardUserDefaults] setObject:value forKey:@"EMAILID"];
}
+(void)SetFirstName:(NSString *)value{
[[NSUserDefaults standardUserDefaults] setObject:value forKey:@"FIRSTNAME"];
}
+(NSString*)GetEmail{
return [[NSUserDefaults standardUserDefaults] stringForKey:@"EMAILID"];
}
+(NSString*)GetFirstName{
return [[NSUserDefaults standardUserDefaults] stringForKey:@"FIRSTNAME"];
}
现在移动到viewController,并在类方法中访问Alloc Init。我是从结果中设置的。
在ViewController中设置
[NSDefaultSession SetEmail:@"YourString"];
[NSDefaultSession SetFirstName:@"YourString"];
现在从任何ViewController
获取会话[NSDefaultSession GetEmail]
[NSDefaultSession GetFirstName]
首先,您应该将这些值放入对象中,其次使用依赖项注入。
因此,首先要制作一个Chosen
类(为了一个更好的名称(,然后将其属于 id
和 name
。现在,唯一需要担心数据保存和加载的位置是"选择"对象,其他一切都会通过。
现在依赖注入。您希望您的风险投资依赖性很明显,不要依靠隐藏在其中的NsuserDefaults之类的单例。因此,请在每个风险投资中选择一个需要访问对象的公共财产。
在application:application didFinishLaunchingWithOptions:
中启动此对象,现在将其注入您的初始ViewController。(即,设置公共财产(
现在,只需通过注入需要访问它的每个其他视图controller再次传递对象。
在我的选项中:
创建CommonClass(NsObject类的子类(
板条箱备用方法并在需要的地方使用它们。
ex:
在UR VC1中:
设置UR对象的值
chosenID = [[[NSUserDefaults standardUserDefaults] valueForKey:@"chosen_xxxx"] integerValue];
chosenName = [[NSUserDefaults standardUserDefaults] valueForKey:@"chosen_name"];
在您的普通类中:
+(NSString *) chosenID{
NSUserDefaults *serverDefults=[NSUserDefaults standardUserDefaults];
NSString * chosenID =[serverDefults objectForKey:@"chosen_xxxx"];
if (chosenID.length==0) {
// do some actions
}
return chosenID;
}
在另一个VC2中:
NSString *id =[commonClass chosenID];
这是解决此问题的右的方法。常见功能是子级别的全部内容 - 您的视图控制器是需要访问这些变量的特定视图控制器。
- 创建类BaseViewController,它是UiviewController的子类。
- 给出baseViewController两个称为选择和Chosenname的公共属性。
- 将您必须的初始代码添加到BaseViewController的ViewDidLoad。
- 从每个现有视图控制器中删除初始代码。
- 使任何需要这些变量的视图控制器类型的baseviewController intead of UiviewController。
现在,这些变量在所有视图控制器中都具有神奇的(并始终(,而没有任何代码重复。