沙盒、NSUserDefaults存储数据

╰半橙微兮° 2023-10-17 05:22 124阅读 0赞

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

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

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

Library存储系统数据。

tmp存储临时数据。

  1. - (void)viewDidLoad {
  2. [super viewDidLoad];
  3. //NSHomeDirectory()获得本应用的沙盒路径。
  4. NSLog(@"%@",NSHomeDirectory());
  5. /*-------读取NSUserDefaults中的数据--------*/
  6. // //NSUserDefaults中一般存储用户设置或者用户的登录信息。
  7. // //读取userDefault中得数据。
  8. // _nameField.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"name"];
  9. //
  10. // _ageField.text = [NSString stringWithFormat:@"%lu",[USER_D integerForKey:@"age"]];
  11. //
  12. // _sexControl.selectedSegmentIndex = [USER_D boolForKey:@"sex"];
  13. //
  14. // //删除NSUserDefaults中的数据。
  15. // //[USER_D removeObjectForKey:@"name"];
  16. /*------------读取文件中的字符串-----------*/
  17. //stringWithContentsOfFile从文件中读取一个字符串。
  18. // NSString *string = [NSString stringWithContentsOfFile:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/myFile.txt"] encoding:NSUTF8StringEncoding error:nil];
  19. //
  20. // //componentsSeparatedByString按照某个字符串分割另外一个字符串;返回一个数组,数组中存储的是分割之后的所有字符串
  21. // NSArray *array = [string componentsSeparatedByString:@"|"];
  22. //
  23. // _nameField.text = [array objectAtIndex:0];
  24. //
  25. // _ageField.text = [array objectAtIndex:1];
  26. //
  27. // _sexControl.selectedSegmentIndex = [[array objectAtIndex:2] integerValue];
  28. /*------------读取文件中的数组-----------*/
  29. NSArray *array = [NSArray arrayWithContentsOfFile:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/arrayFile.txt"]];
  30. _nameField.text = [array objectAtIndex:0];
  31. _ageField.text = [array objectAtIndex:1];
  32. _sexControl.selectedSegmentIndex = [[array objectAtIndex:2] integerValue];
  33. }
  34. //使用userDefault存储
  35. - (IBAction)userDefaultButtonClick:(UIButton *)sender {
  36. //用户数据中心,是一个单例类。
  37. NSUserDefaults *userD = [NSUserDefaults standardUserDefaults];
  38. //NSUserDefaults可以存储对象和一些基本类型。
  39. [userD setObject:_nameField.text forKey:@"name"];
  40. NSInteger age = _ageField.text.integerValue;
  41. [userD setInteger:age forKey:@"age"];
  42. BOOL sex = _sexControl.selectedSegmentIndex;
  43. [userD setBool:sex forKey:@"sex"];
  44. //synchronize同步,把修改同步到外存上。对NSUserDefaults修改之后必须做这个操作。
  45. [userD synchronize];
  46. }
  47. //使用文件存储字符串
  48. - (IBAction)fileSaveStringClick:(UIButton *)sender {
  49. NSString *string = [NSString stringWithFormat:@"%@|%@|%lu",_nameField.text,_ageField.text,_sexControl.selectedSegmentIndex];
  50. //stringByAppendingPathComponent在字符串后追加路径。
  51. NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/myFile.txt"];
  52. NSError *error = nil;
  53. //writeToFile把字符串写入文件,第一个参数是要写入的文件路径,第二个参数是是否原子性写入。第三个参数是字符串转为二进制数据的编码方式,第四个参数是如果写入失败失败的原因。
  54. //必须保证文件路径存在,如果路径下已经有一个同名文件,那么就会把原有的文件覆盖。
  55. if (![string writeToFile:path atomically:NO encoding:NSUTF8StringEncoding error:&error]) {
  56. NSLog(@"%@",error);
  57. }
  58. }
  59. //使用文件存储数组
  60. - (IBAction)fileSaveArrayClick:(UIButton *)sender {
  61. NSArray *array = [NSArray arrayWithObjects:_nameField.text,_ageField.text,[NSNumber numberWithInteger:_sexControl.selectedSegmentIndex], nil];
  62. NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/arrayFile.txt"];
  63. [array writeToFile:path atomically:NO];
  64. //NSDictionary *dic = nil;
  65. }

如下:
Center

输出结果如下:

Center 1

发表评论

表情:
评论列表 (有 0 条评论,124人围观)

还没有评论,来说两句吧...

相关阅读

    相关 和NSBundle

    沙盒 1、沙盒机制介绍 iOS中的沙盒机制是一种安全体系。每个iOS程序都有一个独立的文件系统(存储空间),而且只能在对应的文件系统中进行操作,此区域被称为沙盒。应用必

    相关 (SandBox)

    [沙盒(SandBox)][SandBox] iOS 应用沙盒机制就是指 iOS 应用程序只能在为该程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,

    相关 iOS 机制

    iOS 每个 APP 都有自己的存储空间,这个存储空间叫做沙盒. APP可以在自己的沙盒中进行数据存取操作,但不能访问其他 app 的沙盒空间.对 app 做一些数据存储或者文