Swift plist文件在保存数据时是否应更新?
我知道这已经在很多其他方面讨论过了,但我已经尝试使用以前的答案,并且在这个问题上坚持了一个多星期 我试图从一个plist文件(具有唯一的问题ID)中收集问题,然后将该问题ID与用户的答案一起保存到另一个plist中 我在加载问题时没有问题,但是下面的代码似乎没有更新AnsweredQs plist文件 它打印“true”,这表明写操作有效,但当我返回到xcode时,plist没有变化Swift plist文件在保存数据时是否应更新?,swift,swift3,plist,Swift,Swift3,Plist,我知道这已经在很多其他方面讨论过了,但我已经尝试使用以前的答案,并且在这个问题上坚持了一个多星期 我试图从一个plist文件(具有唯一的问题ID)中收集问题,然后将该问题ID与用户的答案一起保存到另一个plist中 我在加载问题时没有问题,但是下面的代码似乎没有更新AnsweredQs plist文件 它打印“true”,这表明写操作有效,但当我返回到xcode时,plist没有变化 func documentFilePath(fileName: String) -> String {
func documentFilePath(fileName: String) -> String {
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let fileURL = documentsURL.appendingPathComponent(fileName)
return fileURL.path
}
func saveQuestion(ans: String) {
let path = documentFilePath(fileName: "AnsweredQs.plist")
let data = NSMutableDictionary()
data.setValue(QuestionView.questionID, forKey: "id")
data.setValue(ans, forKey: "answer")
data.setValue(Date(), forKey: "date")
data.setValue(loadQuestionData(id: QuestionView.questionID).expiry, forKey: "expiry")
data.setValue(loadQuestionData(id: QuestionView.questionID).maxAge, forKey: "max-age")
let didWriteSucess = data.write(toFile: path, atomically: false)
print(didWriteSucess)
print(data)
}
除此之外,我想在随机生成问题时设置一个检查,以便只选择未回答的问题供用户回答。我已经开始了这方面的工作(虽然这段代码还不完整),但在AnsweredQs plist中似乎没有找到任何东西,进一步表明保存实际上不起作用
func checkQuestion(id: Any) -> Bool {
var trueOrFalse = Bool()
if QuestionView.questionNumber >= 1 {
var questionDict: NSDictionary = [:]
if let url = Bundle.main.url(forResource:"AnsweredQs", withExtension: ".plist"),
let dict = NSDictionary(contentsOf: url) as? [String:Any] {
print(dict)
questionDict = dict as NSDictionary
let allValues = [questionDict]
if allValues.count != 0 {
if allValues.description == id as! String{
trueOrFalse = true
print("true\(allValues)")
} else {
trueOrFalse = false
print("false\(allValues)")
}
}
}
} else {
trueOrFalse = false
print("didn't check")
}
return(trueOrFalse)
这是我的第一个应用程序,我正试图自己弄清楚这一切,但我已经让自己陷入困境,只剩下在这里提问
提前感谢x您是否仔细检查了请求系统写入的路径是否为您期望的路径?在调用documentFilePath后立即打印出“path”。这看起来更像是您的两位代码正在两个不同的位置查找已回答的问题文件。其中一个似乎试图将已回答的问题保存到用户的documents文件夹中,但另一个则试图从应用程序包中加载该文件。(您不应尝试将数据写入应用程序包。)再次检查,应用程序生成的内容应存储在应用程序文档文件夹中,而不是其他位置。您好。非常感谢您的帮助@ScottThompson和Shobhakar,我刚刚有机会再好好看看这个。斯科特,这很有道理。我现在已经更新了代码,所以我总是在使用文件管理器,而不是捆绑包,而且它似乎都在运行-wooohooo。但是有没有办法让我看到正在创建的文件?它并没有完全按照我想要的方式保存,所以我想调整一下,然后看看它看起来如何,等等。再次感谢。你们在生成或发现文件路径时都非常出色。只需打印出路径并查看它。如果您正在使用Mac OS X应用程序,您应该能够访问该文件。如果你在iOS上,你应该能够在模拟器中运行时访问文件。。。在设备上,您必须编写自己的代码来显示文件。