2015-08-14 18 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开发。 –