沙盒、NSUserDefaults存储数据

iOS系统中每一个APP都有一个独立的沙盒。APP对硬盘的访问空间局限于应用本身的沙盒内,无法访问沙盒文件夹外部的空间。

.app文件夹中存储的是应用程序的资源文件。

Documents文件夹中存储用户的数据。

Library存储系统数据。

tmp存储临时数据。

- (void)viewDidLoad {
    [super viewDidLoad];
    
        //NSHomeDirectory()获得本应用的沙盒路径。
    NSLog(@"%@",NSHomeDirectory());
    
    /*-------读取NSUserDefaults中的数据--------*/
    
//        //NSUserDefaults中一般存储用户设置或者用户的登录信息。
//        //读取userDefault中得数据。
//    _nameField.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"name"];
//    
//    _ageField.text = [NSString stringWithFormat:@"%lu",[USER_D integerForKey:@"age"]];
//    
//    _sexControl.selectedSegmentIndex = [USER_D boolForKey:@"sex"];
//    
//        //删除NSUserDefaults中的数据。
//        //[USER_D removeObjectForKey:@"name"];
    
    
    /*------------读取文件中的字符串-----------*/
    
        //stringWithContentsOfFile从文件中读取一个字符串。
//    NSString *string = [NSString stringWithContentsOfFile:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/myFile.txt"] encoding:NSUTF8StringEncoding error:nil];
//    
//        //componentsSeparatedByString按照某个字符串分割另外一个字符串;返回一个数组,数组中存储的是分割之后的所有字符串
//    NSArray *array = [string componentsSeparatedByString:@"|"];
//    
//    _nameField.text = [array objectAtIndex:0];
//    
//    _ageField.text = [array objectAtIndex:1];
//    
//    _sexControl.selectedSegmentIndex = [[array objectAtIndex:2] integerValue];
    
    /*------------读取文件中的数组-----------*/
    
    NSArray *array = [NSArray arrayWithContentsOfFile:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/arrayFile.txt"]];
    
    _nameField.text = [array objectAtIndex:0];
    _ageField.text = [array objectAtIndex:1];
    
    _sexControl.selectedSegmentIndex = [[array objectAtIndex:2] integerValue];
    
}

    //使用userDefault存储
- (IBAction)userDefaultButtonClick:(UIButton *)sender {
    
        //用户数据中心,是一个单例类。
    NSUserDefaults *userD = [NSUserDefaults standardUserDefaults];
    
        //NSUserDefaults可以存储对象和一些基本类型。
    [userD setObject:_nameField.text forKey:@"name"];
    
    NSInteger age = _ageField.text.integerValue;
    
    [userD setInteger:age forKey:@"age"];
    
    BOOL sex = _sexControl.selectedSegmentIndex;
    
    [userD setBool:sex forKey:@"sex"];
    
        //synchronize同步,把修改同步到外存上。对NSUserDefaults修改之后必须做这个操作。
    [userD synchronize];
    
}

    //使用文件存储字符串
- (IBAction)fileSaveStringClick:(UIButton *)sender {
    NSString *string = [NSString stringWithFormat:@"%@|%@|%lu",_nameField.text,_ageField.text,_sexControl.selectedSegmentIndex];
    
        //stringByAppendingPathComponent在字符串后追加路径。
    NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/myFile.txt"];
    
    NSError *error = nil;
        //writeToFile把字符串写入文件,第一个参数是要写入的文件路径,第二个参数是是否原子性写入。第三个参数是字符串转为二进制数据的编码方式,第四个参数是如果写入失败失败的原因。
        //必须保证文件路径存在,如果路径下已经有一个同名文件,那么就会把原有的文件覆盖。
    if (![string writeToFile:path atomically:NO encoding:NSUTF8StringEncoding error:&error]) {
        NSLog(@"%@",error);
    }
    
}

    //使用文件存储数组
- (IBAction)fileSaveArrayClick:(UIButton *)sender {
    NSArray *array = [NSArray arrayWithObjects:_nameField.text,_ageField.text,[NSNumber numberWithInteger:_sexControl.selectedSegmentIndex], nil];
    
    NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/arrayFile.txt"];
    [array writeToFile:path atomically:NO];
        //NSDictionary *dic = nil;
}

如下:
       

输出结果如下:


你可能感兴趣的:(NSUserDefaults,沙盒)