swift3.0真机操作.plist文件

本文介绍了解决iOS应用在真机调试时无法写入或更新Plist文件的问题,通过在沙盒目录生成Plist文件来实现读写操作,并提供了Swift 3.0的具体代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 问题:在使用.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 {         
         }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值