1.tmp拼接
NSString *path= [NSString stringWithFormat:@"%@/tmp/file",NSHomeDirectory()];
2. Library拼接
NSString * path = [NSString stringWithFormat:@"%@/Library/file",NSHomeDirectory()];
3. Documents
NSString * path = [NSString stringWithFormat:@"%@/Documents/file",NSHomeDirectory()];
永久保存数据的方法
1.写入沙盒(此方法没有路径,所以看不到文件,但是可以拿到数据)
[[NSUserDefaults standardUserDefaults] setValue:self.passWord.text forKey:self.userName.text];
//写入沙盒
[[NSUserDefaults standardUserDefaults] synchronize];
//读取沙盒的文件
[[NSUserDefaults standardUserDefaults]valueForKey:self.userName.text]];
2.对(对象)解档和归档
PATH(路径最好是沙盒路径,这样换一台电脑也不会出错)
//归档数据
[NSKeyedArchiver archiveRootObject: download.AllMessage toFile:PATH];
//解档数据
[NSKeyedUnarchiver unarchiveObjectWithFile:PATH];
注:在解归档一个对象时,一定要写,解档器和归档器;否则崩溃;还要遵循<NSCoding>协议
//归档器
-(void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:_title forKey:@"title"];
[aCoder encodeObject:_buyPrice forKey:@"buy_price"];
[aCoder encodeObject:_pic forKey:@"pic"];
[aCoder encodeObject:_endDate forKey:@"end_date"];
}
//解档器
-(id)initWithCoder:(NSCoder *)aDecoder{
if ([super init]) {
_title=[aDecoder decodeObjectForKey:@"title"];
_buyPrice=[aDecoder decodeObjectForKey:@"buy_price"];
_pic=[aDecoder decodeObjectForKey:@"pic"];
_endDate=[aDecoder decodeObjectForKey:@"end_date"];
}
return self;
}
(2)字符串, 数组, 字典有现成的方法进行归档:
(1).字符串归档:
string writeToFile:<#(NSString *)#> atomically:<#(BOOL)#> encoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing *)#>
字符串解档:
NSString * str = [NSString stringWithContentsOfFile:<#(NSString *)#> encoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing *)#>]
(2).数组和字典
归档:
[NSKeyedArchiver archiveRootObject:<#(id)#> toFile:<#(NSString *)#>]
解档:
(id) = [NSKeyedUnarchiver unarchiveObjectWithFile:<#(NSString *)#>]
(3.)手动解档
正常的归档流程:
NSMutableData * data = [[NSMutableData alloc] init];
NSKeyedArchiver * archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:<#(NSMutableData *)#>];
[archiver encodeObject:<#(id)#>]
[archiver encodeInt:<#(int)#> forKey:<#(NSString *)#>]
[archiver finishEncoding]
data writeToFile:<#(NSString *)#> atomically:<#(BOOL)#>
解档:
NSData * data = [[NSData alloc] initWithContentsOfFile:<#(NSString *)#>];
NSKeyedUnarchiver * unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:<#(NSData *)#>];
[unarchiver decodeFloatForKey:<#(NSString *)#>]
[unarchiver decodeIntForKey:<#(NSString *)#>]
[unarchiver decodeObjectForKey:<#(NSString *)#>]
[unarchiver finishDecoding];