gpt4 book ai didi

ios - 为什么 Bundle.main.path(forResource : fileName, ofType : "txt") always return nil?

转载 作者:行者123 更新时间:2023-11-28 09:32:17 28 4
gpt4 key购买 nike

我想逐行读取文本文件并使用 example shown here 在 iOS 屏幕上显示它.

使 textView.text 可选是我可以让 readDataFromFile 运行的唯一方法。当我单击 load 时,该函数运行但始终返回 nil。我认为这意味着找不到文件。

出于测试目的,我在 Xcode 中创建了文本文件。我还尝试将其保存在桌面和项目文件夹中。无论哪种方式,它都可以从项目导航器中读取。我还尝试使用 TextEdit 创建文件,因为该应用最终需要读取在 Xcode 外部创建的文本文件。

如果有人能解释为什么从未找到文本文件,我是否需要做其他事情才能让项目找到它,或者读取函数是否返回 nil 由于某些其他原因,由于我实现它的方式。谢谢。

编辑 (2)

感谢您的反馈。作为回应,我做了四个小的代码更改,允许将文本文件内容写入 textView。更改包括:从文件名中删除文件扩展名,添加文件名数组,从 readDataFromFile 返回 String 而不是 String? 并重写 UITextView 在代码中。这解决了我所知道的问题。

修改后的代码

import UIKit

class ViewController: UIViewController {

var textView = UITextView()
var arrayOfStrings: [String]?
var fileNameWithExtension = "textFile.txt"
let arrayOfFileNames = ["textFile1.txt", "textFile2.txt", "textFile3.txt", "textFile4.txt", "textFile5.txt"]

var fileName = String()

override func viewDidLoad() {
super.viewDidLoad()

// remove comment in the next statement to test files named in ArrayOfFileNames
// fileNameWithExtension = arrayOfFileNames[4]

fileName = fileNameWithExtension.replacingOccurrences(of: ".txt", with: "")

createTextView()
createButton()
}

func readDataFromFile(fileName: String) -> String {

if let path = Bundle.main.path(forResource: fileName, ofType: nil) {

print(fileName)

do {
let data = try String(contentsOfFile: path, encoding: String.Encoding.utf8)
arrayOfStrings = data.components(separatedBy: .newlines)
textView.text = arrayOfStrings?.joined(separator: "\n")

} catch {
textView.text = "file contents could not be loaded"
}

} else {
print(Bundle.main.path(forResource: fileName, ofType: "txt") as Any)
textView.text = "\(fileName) could not be found"
}
return textView.text
}

func createButton () {
let button = UIButton();
button.setTitle(String("Load"), for: .normal)
button.setTitleColor(UIColor.blue, for: .normal)
button.frame = CGRect(x: 100, y: 10, width: 200, height: 100)
button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
self.view.addSubview(button)
}

func buttonAction(myButton: UIButton) {
textView.text = readDataFromFile(fileName: fileName)
print(textView.text as Any)
}

func createTextView () {
textView = UITextView(frame: CGRect(x: 20.0, y: 75.0, width: 340.0, height: 400.0))
textView.textAlignment = NSTextAlignment.left
textView.textColor = UIColor.blue
textView.backgroundColor = UIColor.white
self.view.addSubview(textView)
}
}

编辑 (1)

该文件在项目导航器中可见。我会假设这意味着它在 bundle 中。

这是我的原始代码

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var textView: UITextView?

var arrayOfStrings: [String]?
var fileName = "textFile.txt"

override func viewDidLoad() {
super.viewDidLoad()
createButton()
}

func readDataFromFile(fileName: String) -> String? {

if let path = Bundle.main.path(forResource: fileName, ofType: "txt") {
print(fileName)

do {
let data = try String(contentsOfFile: path, encoding: String.Encoding.utf8)
arrayOfStrings = data.components(separatedBy: .newlines)
print(arrayOfStrings as Any)

textView?.text = arrayOfStrings?.joined(separator: "/n")
return textView?.text

} catch {
textView?.text = "file contents could not be loaded"
return textView?.text
}

} else {
print(Bundle.main.path(forResource: fileName, ofType: "txt") as Any)
textView?.text = "\(fileName) could not be found"
return nil
}
}

func createButton () {
let button = UIButton();
button.setTitle(String("Load"), for: .normal)
button.setTitleColor(UIColor.blue, for: .normal)
button.frame = CGRect(x: 100, y: 15, width: 200, height: 100)
button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
self.view.addSubview(button)
}


func buttonAction(myButton: UIButton) {
print("works")
textView?.text = readDataFromFile(fileName: fileName)
print(textView?.text as Any)
}

文本文件.txt

Line 1
Line 2
Line 3
Line 4
Line 5

最佳答案

1) 你在这行有错误:

var fileName = "textFile.txt"

应该是:

var fileName = "textFile"

2) 检查你的文件是否连接到目标:

enter image description here

关于ios - 为什么 Bundle.main.path(forResource : fileName, ofType : "txt") always return nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41643805/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com