1.plist文件存儲(chǔ)
- iOS中手機(jī)應(yīng)用數(shù)據(jù)存儲(chǔ)是保存在手機(jī)里的應(yīng)用沙盒中的
- plist文件存儲(chǔ)一般都是存取字典和數(shù)組,直接寫成plist文件,把它存到應(yīng)用沙盒當(dāng)中.
- 只有在iOS當(dāng)中才有plist存儲(chǔ),它是ios特有的存儲(chǔ)方式.
存數(shù)據(jù)
- (IBAction)save:(id)sender {
-
獲取沙盒根根路徑
NSString *homeDir = NSHomeDirectory();
在某個(gè)范圍內(nèi)搜索文件夾的路徑.
directory:獲取哪個(gè)文件夾
domainMask:在哪個(gè)路徑下搜索
expandTilde:是否展開路徑.
這個(gè)方法獲取出的結(jié)果是一個(gè)數(shù)組.因?yàn)橛锌梢运阉鞯蕉鄠€(gè)路徑.
NSArray *array = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
在這里,我們指定搜索的是Cache目錄,所以結(jié)果只有一個(gè),取出Cache目錄 NSString *cachePath = array[0];
拼接文件路徑
NSString *filePathName = [cachePath stringByAppendingPathComponent:@"agePlist.plist"];
想要把這個(gè)字典存儲(chǔ)為plist文件.
直接把字典寫入到沙盒當(dāng)中
用字典寫, plist文件當(dāng)中保存的是字典.
NSDictionary *dict = @{@"age" : @18,@"name" : @"gaowei"};
獲取沙盒路徑
ToFile:要寫入的沙盒路徑
[dict writeToFile:filePathName atomically:YES];
用數(shù)組寫,plist文件當(dāng)中保存的類型是數(shù)組.
NSArray *dataArray = @[@56,@"asdfa"];
獲取沙盒路徑
ToFile:要寫入的沙盒路徑
[dataArray writeToFile:filePathName atomically:YES];
}
讀取數(shù)據(jù)
- (IBAction)reader:(id)sender {
-
這個(gè)方法獲取出的結(jié)果是一個(gè)數(shù)組.因?yàn)橛锌梢运阉鞯蕉鄠€(gè)路徑.
NSArray *array = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
在這里,我們指定搜索的是Cache目錄,所以結(jié)果只有一個(gè),取出Cache目錄
NSString *cachePath = array[0];
拼接文件路徑
NSString *filePathName = [cachePath stringByAppendingPathComponent:@"agePlist.plist"];
從文件當(dāng)中讀取字典, 保存的plist文件就是一個(gè)字典,這里直接填寫plist文件所存的路徑
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:filePathName];
如果保存的是一個(gè)數(shù)組.那就通過數(shù)組從文件當(dāng)中加載.
NSArray *dataArray = [NSArray arrayWithContentsOfFile:filePathName];
}
2.偏好設(shè)置存儲(chǔ)
- 使用偏好設(shè)置存儲(chǔ)會(huì)將數(shù)據(jù)存儲(chǔ)到應(yīng)用沙盒的Preferences文件下,路徑為
~~Application/0A46AC9F-04C9-4DA2-B803-5018A979109A/Library/Preferences
- 一般用于存儲(chǔ)應(yīng)用的一些應(yīng)用設(shè)置信息,用戶偏好設(shè)置
// 保存用戶信息至沙盒
NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
// 設(shè)置需要寫入的數(shù)據(jù)
[defaults setObject:self.accountTextF.text forKey:AZAccountInfo];
[defaults setObject:self.pwdTextF.text forKey:AZPwdInfo];
[defaults setBool:self.remPwdSwitch.isOn forKey:AZRemInfo];
[defaults setBool:self.autoLoginSwitch.isOn forKey:AZAutoLoginInfo];
// 立即寫入文件
[defaults synchronize];
// 從沙盒中取出用戶保存的設(shè)置
NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
// 通過用戶保存的設(shè)置進(jìn)行相應(yīng)的設(shè)置
self.remPwdSwitch.on=[defaults boolForKey:AZRemInfo];
3.歸檔
//獲取沙盒臨時(shí)目錄
NSString *tempPath = NSTemporaryDirectory();
NSString *filePath = [tempPath stringByAppendingPathComponent:@"persion.data"];
// 寫入數(shù)據(jù)
[NSKeyedArchiver archiveRootObject:self.contactorArray toFile:filePath];
- archiveRootObject這個(gè)方法底層會(huì)去調(diào)用保存對象的encodeWithCoder方法,去詢問要保存這個(gè)對象的哪些屬性.所以要實(shí)現(xiàn)encodeWithCoder方法, 告訴其要保存這個(gè)對象的哪些屬性.
- encodeWithCoder方法在NSCoding文件中,如果文件父類是NSObject,還需要繼承NSCoding
@interface AZContactor : NSObject<NSCoding>
// 編碼
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.contactName forKey:@"name"];
[aCoder encodeObject:self.phoneNum forKey:@"num"];
}
- 可以將文件沙盒路徑抽成宏,這樣在文件的存取過程中就不會(huì)那么容易出錯(cuò)
#define AZDataPath [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"contactor.data"]
- 取出數(shù)據(jù):
unarchiveObjectWithFile:方法中,系統(tǒng)在底層會(huì)去調(diào)用-(instancetype)initWithCoder:(NSCoder *)aDecoder方法進(jìn)行解碼,需要重寫這個(gè)方法對數(shù)據(jù)進(jìn)行解析
// 解碼
-(instancetype)initWithCoder:(NSCoder *)aDecoder
{
if (self=[super init]) {
self.contactName=[aDecoder decodeObjectForKey:@"name"];
self.phoneNum=[aDecoder decodeObjectForKey:@"num"];
}
return self;
}
// 取出數(shù)據(jù)
NSMutableArray *data=[NSKeyedUnarchiver unarchiveObjectWithFile:AZDataPath];
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。