在 swift 3 操场上阅读 plist

Posted

技术标签:

【中文标题】在 swift 3 操场上阅读 plist【英文标题】:Read plist in swift 3 playground 【发布时间】:2016-12-10 09:43:54 【问题描述】:

我在这里关注了很多问题,但似乎没有任何效果。

我在Playground 中使用Swift3。在 El Capitan 和 Xcode 8.1 上运行。 我有一个plist,其根为Dictionary,其中包含一个 Int 值和两个 Int 二维数组。

plist

我所关注的每个问题似乎都与我所得到的最接近的是,操场不返回错误,但它似乎一直在运行(旋转图标永远不会停止)。

我当前的代码,我相信这是我所达到的最接近的。

import Foundation 
if let path = Bundle.main.path(forResource: "levelList", ofType: "plist") 
    let plistXML = FileManager.default.contents(atPath: path)!

    let mydata = try! PropertyListSerialization.propertyList(from: plistXML, options: [], format: nil) as! [String:Any]

我在类似上下文中从以前的堆栈溢出答案中尝试过的其他选项。

let mydata = Dictionary(fromPropertyList: path, format: "XML") as! [String: Any]
******
let mydata = Dictionary(contentsOf: path) as? [String: Any]

根据链接问题的说明,数据已正确添加到资源文件夹中。 我已经按照 cmets 中的建议重新启动了 Xcode(和 mac)。过了一会儿,执行停止并出现错误“错误:执行被中断原因 exc_bad_access (code=1 address=0x0)” 再次重新启动后,代码有效。自从游乐场正在显示以来,我如何快速将数据提取到数组中 [“2级”:[“Col”:<_ns_array0>(

【问题讨论】:

***.com/questions/28956211/… 【参考方案1】:

您使用了错误的 API,您需要加载 Data 而不是文件系统中的内容。

if let url = Bundle.main.url(forResource: "levelList", withExtension: "plist"),
   let plistData = try? Data(contentsOf: url ) 
      let mydata = try! PropertyListSerialization.propertyList(from: plistData, options: [], format: nil) as! [String:Any]

【讨论】:

根据 OP 自己的回答,您似乎投错了。就像这个答案一样,OP 的原始代码正在转换为字典。但是 OP 自己的回答表明问题是由于 plist 文件包含一个数组而不是字典这一事实。并且 OP 没有使用错误的 API 来获取数据,只是使用了与此处建议的 API 不同的 API。 @rmaddy 令人困惑。问题中的屏幕截图清楚地表明字典作为根元素。 糟糕。我没注意截图。是的,根是字典,因此您的代码在这方面是正确的。所以OP自己的答案根本没有意义。【参考方案2】:

为了最终让我使用的程序正常工作。

devices = NSArray(contentsOfFile: path) as! [AnyObject]

通过进入活动监视器并强制退出被识别为无响应的名为 com.apple.coresimulator 的进程,解决了 Playground 持续运行的问题。这样做后,操场立即运行。

【讨论】:

以上是关于在 swift 3 操场上阅读 plist的主要内容,如果未能解决你的问题,请参考以下文章

快速阅读pList [重复]

计时器不在 Swift 3.0 操场上运行

向 info.plist 添加了自定义键,当我从 Swift 的游乐场访问时,它是 nil

在同一行操场上打印字符 swift 3 [重复]

SpriteKit Swift 2 无法写入 plist

尝试在 Swift 操场上执行此操作时 Xcode 冻结?