三骑篙、iWriter 文件的新建與保存

Hi,大家好森书,我是姜友華靶端,上一節(jié)我們新建好了工程,并將默認格式設置為人們定義的.iw格式凛膏,這一節(jié)我們將實現(xiàn)基于.iw格式的讀寫躲查。

當前工程是基于單文件格式的讀寫,跟我們的要求不符译柏。前面說過,.iw格式的設計是多文件的打包姐霍,類似于.epub格式鄙麦。對于這種格式的處理,macOS提供的FileWrapper也可以實現(xiàn)镊折,下面讓我們來一步步的實現(xiàn)胯府。

一、 修改配置恨胚。

Imported Type Identifiers里的Conforms To改為com.apple.package骂因,須便將Exported Type Identifiers也設置了。

  • 如果不設置Conforms Tocom.apple.package的話赃泡,那保存下來的文件會以文件夾方式存在寒波。
Conforms To設置為com.apple.package

二、修改讀寫代碼升熊。

1. 讀俄烁。

在這之前writerDocument.swift文件里,讀只需要從FileWrapper里獲取數(shù)據(jù)轉為需要的內容即可级野。這里面的configuration.file是一個FileWrapper對象∫惩溃現(xiàn)在我們要用它來實現(xiàn).iw的基于包的讀取。

init(configuration: ReadConfiguration) throws {
        guard let wrappers = configuration.file.fileWrappers,
              let file = wrappers["main.txt"],
              let data = file.regularFileContents,
              let string = String(data: data, encoding: .utf8)
        else {
            throw CocoaError(.fileReadCorruptFile)
        }
        text = string
    }
  • FileWrapper都有一個fileWrappers屬性,該屬性可以基于map讀瘸狡蟆(設置肯定要與之對應)风纠。

2. 寫。

在這之前writerDocument.swift文件里牢贸,寫只用把內容轉為Data添加到FileWrapper后返回即可≈窆郏現(xiàn)在可以用map進行多層組管理,處理好后返回最頂一級即可十减。

func fileWrapper(configuration: WriteConfiguration) throws -> FileWrapper {
        let rootDirectory = FileWrapper(directoryWithFileWrappers: [:])
        let data = text.data(using: .utf8)!
        let wrapper = FileWrapper(regularFileWithContents: data)
        wrapper.filename = "main.txt"
        wrapper.preferredFilename = "main.txt"
        rootDirectory.addFileWrapper(wrapper)
        return rootDirectory
    }

3. 運行一下看看栈幸。

  • 保存,再去打開帮辟,可以如下情形速址。


    保存后,再準備打開
  • Finder里看看由驹。
    選擇Untitled.iw芍锚,右鍵菜單Show Package Contents,情形如下:

    Untitled.iw包里文件

    一個獨立的main.txt文件在那里蔓榄,這是我們在代碼里設置的文件名并炮。

三、iWriter的文件讀寫甥郑。

這是我們前面設計的UI:

iWriter UI

在這里我們需要將每部分的數(shù)據(jù)讀取作進一步的說明逃魄。我們實施的是各自讀寫原則。

1. 各自讀寫原則

什么是各自讀寫呢澜搅?

  1. 區(qū)塊在自身加載時去讀文件伍俘。
  2. 區(qū)塊在失去焦點時去寫文件。
  3. 區(qū)塊在自身卸載時清除內容數(shù)據(jù)勉躺。

2. 各區(qū)塊的數(shù)據(jù)加載癌瘾。

  1. 目錄,加載“catalog.json”文件饵溅。
  2. 章節(jié)區(qū)妨退,復用“catalog.json”文件數(shù)據(jù),按當前章節(jié)的展開狀態(tài)為是加載章節(jié)文件蜕企。章節(jié)數(shù)據(jù)為章節(jié)創(chuàng)建時間戳_版本創(chuàng)建時間戳.txt
  3. 輔助功能區(qū)咬荷,按約定加載對應用的json文件。如大綱加載outline.json文件糖赔。

基于我們的設置萍丐,我們需要在document與UI之間添加一個中間層,用來處理文件讀取放典,這里我們使用了一個Filer類逝变。

好基茵,就到這里,我是姜友華壳影,一次見拱层。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市宴咧,隨后出現(xiàn)的幾起案子根灯,更是在濱河造成了極大的恐慌,老刑警劉巖掺栅,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烙肺,死亡現(xiàn)場離奇詭異,居然都是意外死亡氧卧,警方通過查閱死者的電腦和手機桃笙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沙绝,“玉大人搏明,你說我怎么就攤上這事∩撩剩” “怎么了星著?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長粗悯。 經(jīng)常有香客問我虚循,道長,這世上最難降的妖魔是什么样傍? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任邮丰,我火速辦了婚禮,結果婚禮上铭乾,老公的妹妹穿的比我還像新娘。我一直安慰自己娃循,他們只是感情好炕檩,可當我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著捌斧,像睡著了一般笛质。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捞蚂,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天妇押,我揣著相機與錄音,去河邊找鬼姓迅。 笑死敲霍,一個胖子當著我的面吹牛俊马,可吹牛的內容都是我干的。 我是一名探鬼主播肩杈,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼柴我,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了扩然?” 一聲冷哼從身側響起艘儒,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎夫偶,沒想到半個月后界睁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡兵拢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年翻斟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卵佛。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡杨赤,死狀恐怖,靈堂內的尸體忽然破棺而出截汪,到底是詐尸還是另有隱情疾牲,我是刑警寧澤,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布衙解,位于F島的核電站阳柔,受9級特大地震影響,放射性物質發(fā)生泄漏蚓峦。R本人自食惡果不足惜舌剂,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望暑椰。 院中可真熱鬧霍转,春花似錦、人聲如沸一汽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽召夹。三九已至岩喷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間监憎,已是汗流浹背纱意。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鲸阔,地道東北人偷霉。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓迄委,卻偏偏與公主長得像,于是被迫代替她去往敵國和親腾它。 傳聞我的和親對象是個殘疾皇子跑筝,可洞房花燭夜當晚...
    茶點故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內容