前面講了屬性列表,這裏繼續講ios數據持久化二之對象的解歸檔,以前博客也有講到,能夠查看;ios
二。對象解歸檔code
要使用對象歸檔,對象就必須遵照NSCoding協議,大部分OC對象都遵照NSCoding協議,也能夠在自定義對象中實現該協議,要實現該協議,必須實現兩個協議方法對象
- (void)encodeWithCoder:(NSCoder *)aCoderget
- (instancetype)initWithCoder:(NSCoder *)aDecoder;博客
這兩個方法是必須實現的協議方法,若是不識閒那麼將會報錯,it
- (void)encodeWithCoder:(NSCoder *)aCoder{io
//這裏必須是User類的屬性(須要數據持久化操做的屬性)file
[aCoder encoderObject:[NSNumber numberWithInteger:self.userId] forKey@"userId"];方法
[aCoder encoderObjectself.name forKey:@"name"];error
}
第二個方法:
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
if (self == [super init]){
//這裏的userId必須和第一方方法中的一直,不然仍是讀取不到數據
self.userId = [[aDecoder decodeObjectForKey:@"userId"] integerValue];
self.name = [aDecoder decodeObjectForKey:@"name"];
}
return self;
}
最後怎麼使用?
+(BOOL) save{
NSError *error = nil;
//肯定存儲路勁,一半都是沙盒路徑下的Document文件
NSString *fileName = [self getFileName];
NSString *filePath = [self getFilePath];
if(![[NSFileManager defaultManager] createDirectoryAtPath:filePath withIntermediateDirectories :YES attributes:nil err:&error]){
return NO;
}
return [NSKeyedArchiver archiveRootObject:self toFile:[fileName:userId]];
}