Save Data to .plist File in Swift

前端 未结 7 1341
一整个雨季
一整个雨季 2020-11-27 18:10

I am trying to save data to a plist file in swift, but the data isn\'t showing up as it was saved when the plist is read. This is the code I was using.

var          


        
7条回答
  •  执念已碎
    2020-11-27 18:48

    updated swift code of Rebeloper:

    let BedroomFloorKey = "BedroomFloor"
    let BedroomWallKey = "BedroomWall"
    var bedroomFloorID: AnyObject = 101
    var bedroomWallID: AnyObject = 101
    
     func saveGameData()
        {
            let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as NSArray
            let documentsDirectory = paths.objectAtIndex(0) as! NSString
            let path = documentsDirectory.stringByAppendingPathComponent("GameData.plist")
            let dict: NSMutableDictionary = ["XInitializerItem": "DoNotEverChangeMe"]
    
            //saving values
            dict.setObject(bedroomFloorID, forKey: BedroomFloorKey)
            dict.setObject(bedroomWallID, forKey: BedroomWallKey)
            //...
            //writing to GameData.plist
            dict.writeToFile(path, atomically: false)
            let resultDictionary = NSMutableDictionary(contentsOfFile: path)
            print("Saved GameData.plist file is --> \(resultDictionary?.description)")
    
            self.loadGameData()
    
        }//eom
    
    
        func loadGameData() {
            // getting path to GameData.plist
    
            let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as NSArray
            let documentsDirectory = paths[0] as! NSString
            let path = documentsDirectory.stringByAppendingPathComponent("GameData.plist")
    
    //        let path = documentsDirectory.stringByAppendingPathComponent("GameData.plist")
            let fileManager = NSFileManager.defaultManager()
    
            //check if file exists
            if(!fileManager.fileExistsAtPath(path))
            {
                // If it doesn't, copy it from the default file in the Bundle
    
                if let bundlePath = NSBundle.mainBundle().pathForResource("GameData", ofType: "plist")
                {
                    let resultDictionary = NSMutableDictionary(contentsOfFile: bundlePath)
                    print("Bundle GameData.plist file is --> \(resultDictionary?.description)")
    
                    do
                    {
                        try fileManager.copyItemAtPath(bundlePath, toPath: path)
                        print("copy")
                    }
                    catch _
                    {
                        print("error failed loading data")
                    }
                }
                else
                {
                    print("GameData.plist not found. Please, make sure it is part of the bundle.")
                }
            }
            else
            {
                print("GameData.plist already exits at path.")
                // use this to delete file from documents directory
                //fileManager.removeItemAtPath(path, error: nil)
            }
    
            let resultDictionary = NSMutableDictionary(contentsOfFile: path)
            print("Loaded GameData.plist file is --> \(resultDictionary?.description)")
            let myDict = NSDictionary(contentsOfFile: path)
    
            if let dict = myDict {
                //loading values
                bedroomFloorID = dict.objectForKey(BedroomFloorKey)!
                bedroomWallID = dict.objectForKey(BedroomWallKey)!
                //...
            }
            else
            {
                print("WARNING: Couldn't create dictionary from GameData.plist! Default values will be used!")
            }
    
        }//eom
    

提交回复
热议问题