NSArray或者NSDictionary在写入到文件的时候返回NO,写入失败。
这个时候我们可以试着检查下数组或者字典中存储的是否是自定义的模型(对象),若是自定义的模型或者对象的话,writeToFile是会失败的,
解决方法:
不要使用writeToFile,而是通过归档来达到本地存储的目的,我们需要做的是在模型中遵循NSCoding协议并且重写下面两个方法:
@interface PostDirModel : NSObject<NSCoding>
//栏目ID
@property (nonatomic, assign) NSInteger dirid;
//栏目名称
@property (nonatomic, copy) NSString *dirname;
//栏目图标
@property (nonatomic, copy) NSString *dir_logo;
#define Kdirid @"dirid"
#define Kdirname @"dirname"
#define Kdir_logo @"dir_logo"
@implementation PostDirModel
- (void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeInteger:_dirid forKey:Kdirid];
[aCoder encodeObject:_dirname forKey:Kdirname];
[aCoder encodeObject:_dir_logo forKey:Kdir_logo];
}
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
if (self = [super init]) {
_dirid = [aDecoder decodeIntegerForKey:Kdirid];
_dirname = [aDecoder decodeObjectForKey:Kdirname];
_dir_logo = [aDecoder decodeObjectForKey:Kdir_logo];
}
return self;
}
修改完模型之后,在需要保存或者读取的地方使用归档或者解档
[NSKeyedArchiver archiveRootObject:postDirModelArr toFile:FuncFilePath];
if ([[NSFileManager defaultManager] fileExistsAtPath:FuncFilePath]) {
self.postDirModelArr = [NSKeyedUnarchiver unarchiveObjectWithFile:FuncFilePath];
}
则可以解决writeToFile失败问题
网友评论