iOS-从NsuserDefaults处理全局应用变量



我在用户的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类(为了一个更好的名称(,然后将其属于 idname。现在,唯一需要担心数据保存和加载的位置是"选择"对象,其他一切都会通过。

现在依赖注入。您希望您的风险投资依赖性很明显,不要依靠隐藏在其中的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。

现在,这些变量在所有视图控制器中都具有神奇的(并始终(,而没有任何代码重复。

最新更新