2016-09-27 12 views
1

私のプロジェクトでは、画像urlの数を含むplistが実行されています。同じviewControllerにあるimageViewにurl画像を渡そうとしています。githubと同様の質問がありました。 Loading/Downloading image from URL on SwiftSwift - Read plistCan't get plist URL in Swift私はこれらすべての答えを見てきましたが、致命的なクラッシュではなく運がこれまでにありませんでした。私の部分のコードは次のよう....SwistのPlistからUrl画像をロードする

方法1:

override func viewDidLoad() { 
    super.viewDidLoad() 

    if let path = Bundle.main.path(forResource: "apps", ofType: "plist"), 
     let root = (NSArray(contentsOfFile: path)) 
    { 
     let url = NSURL(string: path) 
     let data = NSData(contentsOf: url! as URL) 
     if let imageData = data { 
     imageView.image = UIImage(data: imageData as Data) 
    } 

     **// Swift Console Printinging as Follows** 

     print(root) 
     // printing all my plist url links like {icon = "https://xxxxxxxxxxx.com/image/girl_face_freckles_eyes_92358_1920x1080.jpg";} 

     print(url) 
     // (/Users/xxxxxx/Library/Developer/CoreSimulator/Devices/52DA3F73-83E0-4C29-9DE1-D8D5F0731C13/data/Containers/Bundle/Applica ... ps.plist) 

     print(data) 
     // nil 

     print(imageView.image) 
     //nil 
    } else { 
     print("Either the file does not exist or the root object is an array") 
    } 

方法2:

let path = Bundle.main.path(forResource: "apps", ofType: "plist") 
    let url = NSURL(string: path!) 
    let imgData = try? Data(contentsOf: url as! URL) 
    let img = UIImage(data: imgData!)! 

    print(img) // fatal crash 

} 

答えて

1

pathがあなたのplistにではなく、あなたのイメージのURLへのパスです。

イメージURLは、「ルート」配列のキー「アイコン」にあります。キーの配列と添字の最初の項目を取得し、あなたのイメージのURLを取得する必要があります

if let item = root[0] as? [String:Any] { 
    if let result = item["icon"] as? String { 
     print(result) 
    } 
} 
1

(NS)BundlepathURL(fileURLWithPath:)で作成する必要がありますファイルシステムのパスと、これらのパスです

let path = Bundle.main.path(forResource: "apps", ofType: "plist") 
let url = URL(fileURLWithPath: path!) 

しかし、なぜ誰もがはるかに便利であるURL関連APIを使用していないん

let url = Bundle.main.url(forResource: "apps", withExtension: "plist") 
関連する問題