plist文件的数据写入和读取操作
只能存放数组和字典,字符串可以存,但是会改变plist文件格式,不能存对象
//拼接路径 需要手动在文件名前加斜杠 ”/”
- (NSString *)stringByAppendingString:(NSString *)aString; //NSString
//拼接路径 系统会自动在文件名前加斜杠 “/” 缺点:如果系统更新,文件名改变,就会查找不到
- (NSString *)stringByAppendingPathComponent:(NSString *)str; //NSPathUtilities
//获取文件的路径
FOUNDATION_EXPORT NSArray<NSString *> *NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde); //NSPathUtilities
//写入数据 (数组或字典)
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile; //NSDictionary NSArray
//从文件读取数组
+ (nullable NSArray<ObjectType> *)arrayWithContentsOfFile:(NSString *)path; //NSArray
数据写入文件:(用plist文件存储数据)
1.获取路径
2.拼接路径/文件名
3.准备要写入的数据,字典或者数组
4.写入文件
从文件读取数据:
1.获取路径
2.拼接路径/文件名
3.读取数据
Preference用户偏好 数据写入和读取
只适合存储比较少量的数据,最好是BOOL类型
@interface NSUserDefaults : NSObject
//取出用户偏好
+ (NSUserDefaults *)standardUserDefaults;
//写入
- (void)setObject:(nullable id)value forKey:(NSString *)defaultName;
- (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName;
- (void)setBool:(BOOL)value forKey:(NSString *)defaultName;
//读取
- (nullable id)objectForKey:(NSString *)defaultName;
- (NSInteger)integerForKey:(NSString *)defaultName;
- (BOOL)boolForKey:(NSString *)defaultName;
//同步数据
- (BOOL)synchronize;
preference数据写入
1.取到用户偏好
2.写入数据
3.同步数据
preference数据读取
1.取到用户偏好
2.读取数据
3.输出
归档解档对文件的操作
要归档的对象必须遵守NSCoding协议,并实现协议方法
//要遵守的协议
@protocol NSCoding
- (void)encodeWithCoder:(NSCoder *)aCoder;
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder;
@end
@interface NSKeyedUnarchiver : NSCoder
//把对象属性转为 NSCoder 这种类型的对象中的值
- (void)encodeObject:(nullable id)objv forKey:(NSString *)key;
- (void)encodeInteger:(NSInteger)intv forKey:(NSString *)key NS_AVAILABLE(10_5, 2_0);
//把NSCoder中 key对应的值 赋值给key对应的对象中的属性
- (nullable id)decodeObjectForKey:(NSString *)key;
//归档方法
+ (BOOL)archiveRootObject:(id)rootObject toFile:(NSString *)path;
//解档方法
+ (nullable id)unarchiveObjectWithFile:(NSString *)path;
对象归档,解档前提条件:
1.创建一个类
2.让这个类遵守NSCoding协议
3.实现协议方法 (归档encodeWithCoder,解档initWithCoder)
4.归档方法内 encode/编码
把对象属性转为 NSCoder 这种类型的对象中的值
5.解档方法内 decode/解读
把NSCoder中 key对应的值 赋值给key对应的对象中的属性
对象归档:
1.创建对象
2.给属性赋值
3.调用归档方法进行归档
archiveRootObject要进行归档的对象 toFile文件路径
对象解档:
1.创建对象来接收解档数据
2.调用解档方法进行解档
unarchiveObjectWithFile解档对象的文件路径