swift3.0真机操作.plist文件

  • 问题:在使用.plist文件的时候,发现在模拟器里可以自如的写入,读取,更新.plist文件,但是真机调试的时候,无法写入和更新.

  • 最后找到原因: 在真机调试中位于资源文件中的Plist文件只能进行读取不能进行写操作,如果需要对Plist文件进行读写操作,必须写代码在沙盒目录中生成相应的Plist文件.

swift3.0版本取沙盒的.plist文件操作方式如下:

        let fileManager = FileManager.default

        //取沙盒里plist文件
        let documentDirectory: NSArray = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) as NSArray
        let writableDBPath = (documentDirectory[0] as AnyObject).appendingPathComponent("appData.plist") as String
        
        //判断沙盒的appData.plist文件是否存在,不存在则从资源目录复制一份
        let dbexits = fileManager.fileExists(atPath: writableDBPath)
        
        if (dbexits != true) {
            
            //资源里的appData.plist文件
            let dbFile = Bundle.main.path(forResource: "appData", ofType: "plist")!

            do {
                //复制
                let success = try fileManager.copyItem(atPath: dbFile, toPath: writableDBPath)
                
            }
                catch{
                    print("异常")
            }

        }

      //清空文件内容
        let arrayDelete = NSMutableArray(contentsOfFile: writableDBPath)
        for item in arrayDelete! {
            let dictDelete = item as! NSDictionary            
            arrayDelete?.remove(dictDelete)
            arrayDelete?.write(toFile: writableDBPath, atomically: true)            
        }

      //添加文件内容
            let itemArray = NSMutableArray(contentsOfFile: writableDBPath)
            let name2 = "测试2"
            let url2 = "url2"   
            let dict = NSDictionary(objects: [name2, url2], forKeys: ["app_name" as NSCopying, "app_url" as NSCopying])
            itemArray?.add(dict)
            itemArray?.write(toFile: writableDBPath, atomically: true)

在退出程序时删除plist文件:

    func applicationWillTerminate(_ application: UIApplication) {
        
        
        let fileManager = FileManager.default
        
        //取沙盒里plist文件
        let documentDirectory: NSArray = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) as NSArray
        let writableDBPath = (documentDirectory[0] as AnyObject).appendingPathComponent("appData.plist") as String
        
       //删除旧数据
         do{
         try fileManager.removeItem(atPath: writableDBPath)
         }
         catch {         
         }

    }

你可能感兴趣的:(swift3.0真机操作.plist文件)