【ios】常用的数据存储方式和第一次App启动判断

判断是否是第一次启动,是否加载启动页

在appdelegate.m中找到 “application:didFinishLaunchingWithOptions:”  
通过NSUserDefaults 来进行判断 
 if (![[NSUserDefaultsstandardUserDefaults] boolForKey:@"everLaunched"])
 {         
     [[NSUserDefaultsstandardUserDefaults]setBool:YESforKey:@"everLaunched"];       
     [[NSUserDefaultsstandardUserDefaults]setBool:YESforKey:@"firstLaunch"];      
      NSLog(@"first launch");  
    }else {
          [[NSUserDefaultsstandardUserDefaults]setBool:NOforKey:@"firstLaunch"];          
       NSLog(@"second launch");
   }

  2、在RootViewController的  viewWillAppear:的方法里面进行添加 
 if ([[NSUserDefaultsstandardUserDefaults] boolForKey:@"firstLaunch"]) { 
         [[NSUserDefaultsstandardUserDefaults]setBool:NOforKey:@"firstLaunch"];  
         UserGuideController *userGuide = [[[UserGuideControlleralloc] init] autorelease];   
        [self present ModalViewController:userGuide animated:YES];   
   }
  3、在设置页面里面也可以添加同样的视图,让用户可以查看。  
  4,在沙盒地下设置一个文件,第一次运行的时候就创建这个文件,即运行这个新手指南类似的文件,以后判断是否
存在这个文件,如果存在则不再创建(即不执行新手指南的展示方法)。
或者在数据库里做一个标记,标记此文件是否被创建过。          
自己实践:  
    if(![[NSUserDefaults standardUserDefaults] boolForKey:@"firstStart"]){ 
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"firstStart"];  
       NSLog(@"第一次启动");  
       self.window.rootViewController = [[WuNewFeature alloc]init]; 
    }else{
         NSLog(@"不是第一次启动"); 
        self.window.rootViewController = [[WuNewFeature alloc]init]; 
        MainVC *mainVC = [[MainVC alloc]init];   
        self.window.rootViewController = [[BaseNavigationController alloc]initWithRootViewController:mainVC];  
   }

ios 常见的四种存储方式

1.CoreData对象存储
2.NSUserDefaults存储配置信息
3.文件沙盒存储
4.数据库存储

1、归档和解档

常用方法

-(void)NSKeyedArchiver
{
    NSString *str = @"abc";
    NSString *str1 = @"efg";
   
    NSArray *Array = [NSArray arrayWithObjects:str,str1, nil];
   
    //保存数据
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
    NSString *fileName = [path stringByAppendingPathComponent:@"text"];
    [NSKeyedArchiver archiveRootObject:Array toFile:fileName];
    NSLog(@"%@=======",path);
    NSLog(@"%@",fileName);
    //再次赋值,观察数据变化
    str = @"a";
    str1 = @"";
   
    //加载数据
    NSArray *arr = [NSKeyedUnarchiver unarchiveObjectWithFile:fileName];
    str = [arr objectAtIndex:0];
    str1 = [arr objectAtIndex:1];
   
    NSLog(@"%@",str);
    NSLog(@"%@",str1);

}

打印出来的数据应该是第一次输入的内容。因为在解档后,字符串是从文件中读出的

属性解析:
[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
NSDocumentDirectory 打开的目录是文档目录
NSDocumentationDirectory: 打开的是/Library/Documentation/的目录。
NSDownloadsDirectory 打开的下载目录。
因为应用是在沙箱(sandbox)中的,在文件读写权限上受到限制,只能在几个目录下读写文件:
Documents:应用中用户数据可以放在这里,iTunes备份和恢复的时候会包括此目录
tmp:存放临时文件,iTunes不会备份和恢复此目录,此目录下文件可能会在应用退出后删除
Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除
详细内容:
http://blog.csdn.net/luohai859/article/details/42458307

你可能感兴趣的:(【ios】常用的数据存储方式和第一次App启动判断)