UI高級(jí)02-歸檔和觸摸-TableView的編輯狀態(tài)與刪除

sandbox 沙盒

NSString *sandboxPath = NSHomeDirectory(); 

—->Home 表示的是用戶的根目錄 (表示應(yīng)用程序的根目錄)

**沙盒中的tmp目錄 **
保存臨時(shí)的數(shù)據(jù), 不會(huì)被itunes備份, 系統(tǒng)會(huì)自動(dòng)清理該目錄

NSString *tmpPath = NSTemporaryDirectory();

沙盒中查找caches目錄 (如邊下邊播的視頻)
->保存需要持久性的數(shù)據(jù)
->該目錄需要提供一個(gè)清理機(jī)制 (清空該目錄)
->itunes是不會(huì)同步該目錄
部分目錄是需要通過(guò)搜索來(lái)查找 需要用到以下方法搜索指定文件夾的路徑
參數(shù):

  • 要搜索的文件夾
  • 指定要搜索的范圍 - 固定的值, "用戶域"
  • 是否要解開(kāi)波浪號(hào) ~ 表示的是用戶的根目錄, iOS開(kāi)發(fā)中一定要YES
NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
// NSCachesDirectory 只有一個(gè)目錄 即緩存目錄

沙盒中查找Documents目錄
注意: 目錄是NSDocumentDirectory, 而不是NSDocumentationDirectory
-> itunes會(huì)同步, icloud也會(huì)同步 (注意: 不能隨便放置臨時(shí)數(shù)據(jù)或者大文件)
->該目錄的文件, 是可以通過(guò)itunes與電腦進(jìn)行共享 (該刪除的還得刪除)
->存放需要持久化保存的數(shù)據(jù)
->系統(tǒng)不會(huì)清理該目錄, 也不需要程序員來(lái)手動(dòng)清理(清空整個(gè)文件夾)

NSString *docuPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;

注意

以上兩個(gè)方法查找目錄 如果查找錯(cuò)誤是沒(méi)有提示的 尤其是查找Documents目錄 注意分清方法參數(shù)
如果存在同名的文件, 寫(xiě)入操作會(huì)覆蓋原來(lái)的文件 (沒(méi)有任何提示!)

存儲(chǔ)數(shù)據(jù)/拼接數(shù)據(jù)
當(dāng)要將數(shù)據(jù)寫(xiě)入到沙盒中 需要準(zhǔn)確的路徑
通過(guò)上述方法找到的路徑只能代表到文件夾的路徑 并不是到指定文件的目錄
因此如果需要寫(xiě)入到沙河目錄中的Documents目錄中的plist文件中
需要通過(guò)上述方法找到文件夾目錄
然后拼接加上文件名得到完整的目錄才可以寫(xiě)入 以下是拼接方法 分兩步

先得到文件夾目錄
NSString *docuPath = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES).lastObject;
再拼接成文件具體目錄
NSString *filePath = [docuPath stringByAppendingPathComponent:@"hero.plist"]; 
—>使用這個(gè)方法會(huì)自動(dòng)加 “/“ 
—>第三步 寫(xiě)入
BOOL result = [tempArr writeToFile:filePath atomically:YES];
if (result == YES) 
   {
      NSLog(@"寫(xiě)入成功");
   }

沙盒當(dāng)中的Preference目錄 (偏好設(shè)置文件夾)
不需要我們直接操作, 偏好設(shè)置的相關(guān)文件會(huì)保存在這里
偏好設(shè)置有系統(tǒng)提供的類專門(mén)用來(lái)處理, 處理的方式類似于字典操作
"NSUserDefaults" 就是系統(tǒng)提供的, 專門(mén)用來(lái)處理用戶偏好設(shè)置 (配置一些默認(rèn)的參數(shù), 如閱讀模式等)

"NSUserDefaults" 是單例對(duì)象, 不要使用init方法來(lái)初始化
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

針對(duì)不同類型的數(shù)據(jù), 有不同的設(shè)置方法
->object : 要設(shè)置的對(duì)象
->key : 綁定該值的唯一key, 通過(guò)該key來(lái)獲取訪值

[defaults setObject:@"夜間模式" forKey:ReadModeKey];
取值
NSString *readMode = [defaults objectForKey:ReadModeKey];

歸檔與解檔

使用歸檔與解檔的作, 是將數(shù)據(jù)持久化的保存到沙盒當(dāng)中
能夠還原成對(duì)象 (模型)
能夠直接將自定義對(duì)象保存起來(lái)
—>plist不支持對(duì)象的保存, 寫(xiě)入失敗, 沒(méi)有任何提示
—>plist文件基本不會(huì)以用來(lái)保存NSData

歸檔與解檔, 需要NSCoding協(xié)議的支持
coding 編碼, NSCoding用來(lái)支持對(duì)象進(jìn)行編碼保存, 解碼還原的協(xié)議
要讓對(duì)象能夠支持歸檔與解檔, 需要做兩個(gè)事件(指對(duì)象實(shí)現(xiàn)了這兩個(gè)要求才符合歸檔解檔的資格)

    1. 讓對(duì)象遵守NSCoding協(xié)議
    1. 實(shí)現(xiàn)協(xié)議中兩個(gè)關(guān)鍵的方法

其中兩個(gè)方法要在對(duì)象中實(shí)現(xiàn)
歸檔方法
encode是編碼的意思, coder編碼器
該方法是歸檔的關(guān)鍵操作
將對(duì)象上的屬性保存起來(lái)

要做的事情: 將本對(duì)象所有的屬性進(jìn)行歸檔操作

- (void)encodeWithCoder:(NSCoder *)aCoder
{
    NSCoder 表示編碼器, 能夠?qū)傩跃幋a成二進(jìn)制數(shù)據(jù), 可以保存起來(lái)
    /*------ 將本對(duì)象所有的屬性進(jìn)行歸檔操作 ------*/
    // 不同類型的數(shù)據(jù), 有不同的歸檔方法
    [aCoder encodeObject:_name forKey:PropertyNameKey];
    [aCoder encodeInteger:_money forKey:PropertyMoneyKey];
}

解檔方法
獲取已經(jīng)保存的對(duì)象屬性, 還原到對(duì)象身上
要做的事情:

  1. 實(shí)例化一個(gè)本對(duì)象
  2. 將解檔還原回來(lái)的屬性, 賦值到本對(duì)象身上
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
    NSCoder 也是解碼器, 能夠?qū)⒍M(jìn)制數(shù)據(jù)還原成屬性
    /*------ 1. 實(shí)例化對(duì)象 ------*/
    self = [super init];
    if (self) {
        /*------ 2. 將解檔出來(lái)的屬性, 還原到自己身上 ------*/
        _name = [aDecoder decodeObjectForKey:PropertyNameKey];
        _money = [aDecoder decodeIntegerForKey:PropertyMoneyKey];
    }
    return self;
}

NSKeyedArchiver 能夠?qū)?支持NSCoding協(xié)議的自定義對(duì)象"歸檔保存到硬盤(pán)當(dāng)中

[NSKeyedArchiver archiveRootObject:hero toFile:filePath];

以上方法指的是將hero對(duì)象保存到filePath對(duì)應(yīng)的文件當(dāng)中 (歸檔保存)
保存的對(duì)象必須支持NSCoding協(xié)議
*第一個(gè)參數(shù)指的是一個(gè)遵守了NSCoding協(xié)議的對(duì)象
*第二個(gè)參數(shù)指的是文件的具體路徑

NSKeyedUnarchiver 能夠?qū)?NSKeyedArchiver所保存的歸檔文件, 解析還原成對(duì)象 如下:

HMHero *hero = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容