将数据保存到plist文件时是否应更新?

时间:2017-05-01 18:20:00

标签: swift swift3 plist

我知道这已经在很多其他方面进行了讨论,但我尝试使用以前的答案并且仍然坚持这个问题超过一周。

我正在尝试从一个plist文件中收集问题(带有唯一的问题ID),然后将该问题ID与用户的答案保存到另一个plist中。

我在加载问题时没有问题,但以下代码似乎没有更新AnsweredQs plist文件。

它打印“true”表示写入有效,但当我返回xcode时,plist没有变化。

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

0 个答案:

没有答案