2015-08-14 124 views
0

我查看了許多SO問題,用戶想要在其應用程序目錄中訪問文檔。我對這一切都很陌生,只想對此事進行澄清。我建立一個開源content blocker爲iOS 9在iOS中檢索和寫入文件

File tree

你可以看到文件樹。我想知道是否有可能訪問文件blockerList.json這是在文件夾中Adblock內容阻止程序。我的目標是根據用戶想要構建的內容編寫json文件。我需要能夠修改這個文件的內容。這是可能的還是我應該停止嘗試並保持這種狀態?

感謝您的任何幫助。

+2

第一次啓動應用程序時,您必須將文件複製到文檔目錄中。您無法寫入應用程序包中的文件。 – dan

+0

在構建時或在iOS設備上安裝應用程序之後,您想要更改文件還不清楚嗎? – zaph

+0

我想在iOS設備上安裝應用程序後編輯文件。 –

回答

0

說明:您擁有應用程序捆綁文件的只讀權限。

  1. 首先複製文件NSDocumentDirectory與備份屬性。使用refrerence copy file to document directory iphoneHow do I prevent files from being backed up to iCloud and iTunes?
  2. 檢查參考ImportingJSONFileY6JSONFileManager-iOS以讀取和寫入JSON文件中的更改。
+0

該項目「Y6JSONFileManager-iOS」沒有太多的工作,錯誤處理是這樣的評論:「// TODO:處理錯誤」。 – zaph

+0

這些修改會影響原始的json文件嗎? –

+0

它會影響文檔目錄中的複製文件。 –

0

應用程序包是隻讀的,就像@dan說的那樣。因此,您必須將文件從捆綁包複製到Document目錄,然後才能隨時修改文件。

複製文件到文件是這樣的:

class func copyFile(fileName: String) { 
    let destPath: String = getPathInDocument(fileName) 
    var fromPath = NSBundle.mainBundle().pathForResource("blockerList", ofType: "json")! 

    var fileManager = NSFileManager.defaultManager() 
    if !fileManager.fileExistsAtPath(destPath) { 
     fileManager.copyItemAtPath(fromPath, toPath: destPath, error: nil) 
    } else { 
     println("The file allready exists at path:\(destPath)") 
    } 

} 

class func getPathInDocument(fileName: String) -> String { 
    return NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0].stringByAppendingPathComponent(fileName) 
} 

希望這將幫助你!

+0

修改會影響原始的json文件嗎? –

+0

如果原始json文件位於包中,則無法修改它。相反,您可以修改Document目錄中的文件。 – Bannings

+0

你認爲有一種方法可以將json包含在應用程序中,以便它可以被編輯?在應用程序中,我只是[加載此json以製作內容攔截器](https://github.com/jusleg/OpenAdblock/blob/master/Open%20Adblock/Adblock%20Content%20Blocker/ActionRequestHandler.swift)。是否認爲它會工作如果我在應用程序中生成json然後加載它?我很抱歉noob問題,我剛剛開始iOS開發。 –