簡體   English   中英

Swift中的可選類型錯誤:致命錯誤:解開可選值時意外發現nil

[英]Optional type error in Swift: fatal error: unexpectedly found nil while unwrapping an Optional value

我正在嘗試使用FBSDK v4.x從Facebook獲得相冊。 我在下面使用此代碼,並在打印出結果后將結果作為json接收,但隨后會導致如下錯誤:' 致命錯誤:在此行代碼中意外發現nil,同時展開了可選值 ': let graphData = result .valueForKey(“ data”)一樣! [FBSDKShareAPI] .so任何人都可以幫助我解決此錯誤。 提前致謝。

func fetchAlbum(){
    print(FBSDKAccessToken.currentAccessToken())
    let graphRequest: FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me?fields=albums", parameters: nil);
    graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in
        if let gotError = error{
            print(gotError.description);
        }
        else{
            print("fetched data: \(result)")
            if result != nil{ 
            let graphData = result.valueForKey("data") as! [FBSDKShareAPI]  
            var albums:[AlbumModel] =  [AlbumModel]();
            for obj:FBSDKShareAPI in graphData{
                let desc = obj.description;
                println(desc);
                let name = obj.valueForKey("name") as! String;
                println(name);
                if(name == "ETC"){
                    let test="";
                }
                let id = obj.valueForKey("id") as! String;
                var cover = "";
                if let existsCoverPhoto : AnyObject = obj.valueForKey("cover_photo"){
                    let coverLink = existsCoverPhoto as! String;
                    cover = "/\(coverLink)/photos";
                }
                //println(coverLink);
                let link = "/\(id)/photos";
                let model = AlbumModel(name: name, link: link, cover:cover);
                albums.append(model);
                }
            NSNotificationCenter.defaultCenter().postNotificationName("albumNotification", object: nil, userInfo: ["data":albums]);

            }
        }

    })
}

更好的是,你可以去

if let graphData = result?.valueForKey("data") as? [FBSDKShareAPI] {
    //bla
}

它應該為您做所有的零檢查

像這樣工作正常:

    func fetchAlbum(){
    print(FBSDKAccessToken.currentAccessToken())
    let graphRequest: FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me/albums", parameters: nil);
    graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in
        if let gotError = error{
            print(gotError.description);
        }
        else{
            let graphData: NSArray! = (result?["data"])! as? NSArray
            if (graphData != nil){

                var albums:[AlbumModel] =  [AlbumModel]();
                var obj: NSArray?
                for obj in graphData{
                let desc = obj.description;
                let name = obj.valueForKey("name") as! String;
                if(name == "ETC"){
                    let test="";
                }
                let id = obj.valueForKey("id") as! String;
                var cover = "";
                if let existsCoverPhoto : AnyObject = obj.valueForKey("cover_photo"){
                    let coverLink = existsCoverPhoto as! String;
                    cover = "/\(coverLink)/photos";
                }
                let link = "/\(id)/photos";
                let model = AlbumModel(name: name, link: link, cover:cover);
                albums.append(model);
                }
            NSNotificationCenter.defaultCenter().postNotificationName("albumNotification", object: nil, userInfo: ["data":albums]);

                }else{
                    print("--------------------------")
            }

        }

    })
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM