iOS从文件中读取

时间:2017-03-01 16:58:05

标签: ios iphone swift xcode file

我正在尝试让我的iPhone应用程序将文件从文件加载到字符串数组中,每个数组元素的文件中有1行。

我使用sublime文本创建了一个输入文件作为文本文件。我将文件(位于项目目录中的文件夹内)拖入xCode,进入项目层次结构中相同位置的文件夹。

我也尝试将其作为捆绑包添加(通过复制文件夹并使用.bundle扩展名重命名),但无济于事。目前,我的应用程序有2个位置的文件(显然我打算删除不需要的版本,但我不知道这将如何工作,所以我暂时离开它。)

我写了一个函数,我想读取我的文件,并将其内容组装成一个数组:

func readFromFile(filename: String) -> [String]? {

    guard let theFile = Bundle.main.path( forResource: fileName, ofType: "txt") else {           
        return nil // ALWAYS returns nil here: Seems 'filename' can't be found?????
    }

    do { // Extract the file contents, and return them as a split string array
        let fileContents = try String(contentsOfFile: theFile)
        return fileContents.components(separatedBy: "\n")

    } catch _ as NSError {
        return nil
    }
}

目前,该函数始终在代码中注释的位置返回nil。

我已经为这个工作了大约6个小时(并尝试了我可以在StackOverflow,google等上找到的每一个建议)而我只是越来越混淆各种版本的Swift和iOS的复杂性之间的差异发展。我似乎无法在任何地方找到一致的答案。我已经检查了苹果文档,但它的级别太高了,没有示例代码让我能够在我的快速初学者级别上理解。

我也尝试用“.txt”扩展名命名文件,但这也无济于事。

1 个答案:

答案 0 :(得分:2)

如果您要将文件称为forResource: "alert01", ofType: "txt",则必须将该文件命名为 alert01.txt

从捆绑包中加载不起作用。该文件需要成为项目的一部分,如第一个条目所示。

但是,您的代码无法正常工作,因为您已创建了文件夹引用。这意味着文件夹 PanicAlertFiles 正在被复制,并将其所有内容复制到您的包中。您的代码需要深入到该文件夹​​才能检索您的文件。使用path(forResource:ofType:inDirectory:)执行此操作,或者(如果您不想显式编写文件名代码)获取文件夹,然后使用FileManager检查其内容。