iOS 文件路径及数据保存

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 文件路径及数据保存相关的知识,希望对你有一定的参考价值。

参考技术A ios沙盒路径:
Documents:用于存储用户数据,可被iTunes备份
Library:包含两个子目录
可创建子文件夹。可以用来放置您希望被备份但不希望被用户看到的数据。该路径下的文件夹,除Caches以外,都会被iTunes备份。
Caches:适合存储体积大,不需要备份的非重要数据
Preferences:通常保存应用的设置信息(NSUserDefaults)
tmp:用于存放临时文件,不会被iTunes备份

Data保存到沙盒方法:

图片和视频保存到相册方法:
首先要在plist中添加相册权限获取说明:
在plist中添加Privacy - Photo Library Additions Usage Description , value为提示语
图片及视频保存到相册:

iOS开发 文件路径保存

OS文件本地化处理要经过三个步骤,获得文件保存路径、根据文件的属性选择对应的存档方式,存档读档的实现。

一、获得文件保存路径

1."应用程序包": 这里面存放的是应用程序的源文件,包括资源文件和可执行文件。

NSString *path = [[NSBundle mainBundle] bundlePath];

2.Documents: 最常用的目录,iTunes同步该应用时会同步此文件夹中的内容,适合存储重要数据。

NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;

3.Library/Caches: iTunes不会同步此文件夹,适合存储体积大,不需要备份的非重要数据。

NSString *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;

4.tmp: iTunes不会同步此文件夹,系统可能在应用没运行时就删除该目录下的文件,所以此目录适合保存应用中的一些临时文件,用完就删除。

NSString *path = NSTemporaryDirectory();

5.Library/Preferences: iTunes同步该应用时会同步此文件夹中的内容,通常保存应用的设置信息

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

二:不同的文件属性需要有不同的文件保存处理方式 

1.plist文件一般保存的文件格式

NSArray;

NSMutableArray;

NSDictionary;

NSMutableDictionary;

NSData;

NSMutableData;

NSString;

NSMutableString;

NSNumber;

NSDate;

(1)获取文件保存路径

(2)保存

[array writeToFile:fileName atomically:YES];

(3)读取

NSArray *result = [NSArray arrayWithContentsOfFile:fileName];

( 4 )注意

只有以上列出的类型才能使用plist文件存储。

存储时使用writeToFile: atomically:方法。 其中atomically表示是否需要先写入一个辅助文件,再把辅助文件拷贝到目标文件地址。这是更安全的写入文件方法,一般都写YES。

读取时使用arrayWithContentsOfFile:方法。

2.Preference 配置文件

(1)获得NSUserDefaults文件

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

(2)向文件中写入内容

[userDefaults setObject:@"AAA"forKey:@"a"];

注:[userDefaults setObject:值 forKey:关键词]

(3)同步到配置文件里

[userDefaults synchronize];

(4)读取文件

NSString *name = [userDefaults objectForKey:@“a”]; //读取配置文件中为“a”的值

BOOL sex = [userDefaults boolForKey:@"sex"];

注: 要使用对应的对象类型来读取 配置文件中的值,且需要用对应的方法。

(5)注意

偏好设置是专门用来保存应用程序的配置信息的,一般不要在偏好设置中保存其他数据。

如果没有调用synchronize方法,系统会根据I/O情况不定时刻地保存到文件中。所以如果需要立即写入文件的就必须调用synchronize方法。

偏好设置会将所有数据保存到同一个文件中。即preference目录下的一个以此应用包名来命名的plist文件。

3.NSKeyedArchiver 归档

归档在iOS中是另一种形式的序列化,只要遵循了NSCoding协议的对象都可以通过它实现序列化。由于决大多数支持存储数据的Foundation和Cocoa Touch类都遵循了NSCoding协议,因此,对于大多数类来说,归档相对而言还是比较容易实现的。

(1)在需要归档的对象里遵守NSCoding协议,并且使用对应的方法

在.h文件里面遵守 NSCoding 协议

@interface Person : NSObject

在.m文件里实现 NSCoding 协议的方法

//归档

- (void)encodeWithCoder:(NSCoder *)aCoder {

[aCoder encodeObject:self.avatar forKey:@"avatar"];

[aCoder encodeObject:self.nameforKey:@"name"];

[aCoder encodeInteger:self.age forKey:@"age"];

}

//解档

- (id)initWithCoder:(NSCoder *)aDecoder {

if([superinit]) {

self.avatar = [aDecoder decodeObjectForKey:@"avatar"];

self.name= [aDecoder decodeObjectForKey:@"name"];

self.age = [aDecoder decodeIntegerForKey:@"age"];

}

returnself;

}

注: 要归档子类,必须在实现[super encodeObject:aCoder];[super initWithCoder:aDecoder];方法

(2)使用:

存档使用NSKeyedArchiver中的archiveRootObject: toFile:方法

// 1.创建文件路径

NSString *file = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"person.data"];

// 2.存档到文件目录下

[NSKeyedArchiver archiveRootObject:person toFile:file];

读档需要使用NSKeyedUnarchiver 中的  unarchiveObjectWithFile: 方法

// 1.创建文件路径

NSString *file = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"person.data"];

 

// 2.读取文件目录下的文件

Person *person = [NSKeyedUnarchiver unarchiveObjectWithFile:file];

(3)注意

必须遵循并实现NSCoding协议

保存文件的扩展名可以任意指定

继承时必须先调用父类的归档解档方法

 

以上是关于iOS 文件路径及数据保存的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发 文件路径保存

C# winform 中根据数据库保存的路径删除硬盘里的文件(图片)问题

IOS中获取各种文件的目录路径的方法

UIImagePickerController 保存文件路径 iOS/iPhone

iOS沙盒路径

iOS 获取沙盒文件路径及 写入/删除 沙盒文件