我试图使用Swift创建一个可以向数据库添加类的模块(ClassA.plist)。代码是这样的:
class AddClass:UITableViewController {
@IBOutlet weak var txtClassName: UITextField!
@IBAction func Save(_ sender: Any) {
let plistPath = Bundle.main.path(forResource: "ClassA", ofType:"plist")
let array = NSMutableArray(contentsOfFile: plistPath!)
let AddData = NSDictionary(object: txtClassName.text!, forKey: "name" as NSCopying)
array?.add(AddData)
array?.write(toFile: plistPath!, atomically: false)
DispatchQueue.main.async {
super.tableView.reloadData()
}
}
我的故事板是这样的:
但是,当我在文本字段中写入内容并单击“保存”时,我的数据库中没有任何更改。没有显示警告,错误或日志。有谁知道如何解决这个问题?
答案 0 :(得分:1)
您无法写入应用包中的文件。应用包是只读的。您需要将文件复制到一个沙箱目录(如文档目录),然后才能进行更改。
答案 1 :(得分:0)
正如许多人所指出的那样,应用程序的包是只读的。你可以做的是复制文件,如果你真的想要使用它并将它放在documentDirectory中,你可以在那里读写它。
let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
let plistPath = paths.appending("/data.plist")
let fileManager = FileManager.default
if !fileManager.fileExists(atPath: plistPath)
{
// Default plist name is Info. Just using ClassA
let bundle = Bundle.main.path(forResource: "ClassA", ofType: "plist")
try! fileManager.copyItem(atPath: bundle!, toPath: plistPath)
}
let data = NSMutableDictionary(contentsOfFile: plistPath)
data?.setObject("Hello World", forKey: "name" as NSCopying)
data?.write(toFile: plistPath, atomically: true)
print(data)