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 文件路径及数据保存的主要内容,如果未能解决你的问题,请参考以下文章
C# winform 中根据数据库保存的路径删除硬盘里的文件(图片)问题