2016-12-10 4 views
2

私はここで多くの質問に従ってきましたが、何も動作していないようです。スウィフト3プレイグラウンドでplistを読む

PlaygroundSwift3を使用しています。 El CapitanとXcode 8.1で動作します。 私はplistをルートとしてDictionaryに1つのInt値と2つの2D配列Intsを含んでいます。

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] 

データは、リンクされた質問が指示したとおり、リソースフォルダに正しく追加されました。 コメントに示唆されているようにXcode(とmac)を再起動しました。しばらくして実行がエラー「エラー:実行が中断されました。理由exc_bad_access(コード= 1アドレス= 0x0)」 もう一度再起動すると、コードが機能します。 [「コル」:< _NS_array0 0x7fc620d091a0>(あなたは間違ったAPIを使用している

+0

http://stackoverflow.com/questions/28956211/swift-could-not-read-local-plist-file-to-dictionary-in-a-playground –

答えて

0

をロードする。

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

遊び場が継続的に実行している問題は、活動カ月に行くことによって解決されましたnitorとforceは、応答しないと識別されたcom.apple.coresimulatorという名前のプロセスを終了します。この後、遊び場は即座に走りました。

1

は、あなたが必要とする瞬間に遊び場が は、[「レベル2」見せているので、どのように私は、迅速で配列にデータを抽出しますか最終的にはプログラムは、私が使用し作業を取得するには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] 
}