2014-11-22 105 views
3

我使用Facebook iOS SDK創建自定義故事,該應用程序使用Swift編寫。我基於我的代碼圍繞他們的文檔示例https://developers.facebook.com/docs/ios/open-graph#createobject使用Swift創建Facebook Open Graph對象

一切順利,直到我必須創建FBGraphObject

NSMutableDictionary<FBOpenGraphObject> *object = [FBGraphObject openGraphObjectForPost]; 

在斯威夫特我已經重寫此塊爲:

var object = FBGraphObject.openGraphActionForPost() 

// specify that this Open Graph object will be posted to Facebook 
object.setObject(true, forKey: "provisionedForPost") 

// for og:title 
object.setObject(description["title"]!, forKey: "title") 

// for og:type, this corresponds to the Namespace you've set for your app and the object type name 
object.setObject("bppridereport:ride", forKey: "type") 

// for og:description 
object.setObject(description["description"]!, forKey: "description") 

FBRequestConnection.startForPostOpenGraphObject(object, completionHandler: { (connection:FBRequestConnection!, result:AnyObject!, error:NSError!) -> Void in 

    if error == nil { 
     let objectId = result["id"] 

     } else { 
      NSLog("Error posting the Open Graph object to the Object API:", error); 
     } 

    }) 

這使我的錯誤:的NSMutableDictionary是不相同到FBOpenGraphObject,有什麼有意義的,閱讀文檔FBOpenGraphObject只是一個打扮的NSMutableDictionary,所以我把對象作爲FBOpenGraphObject來解決錯誤

var object = FBGraphObject.openGraphActionForPost() as FBOpenGraphObject 

問題是,當我現在編譯並運行應用程序時,它崩潰在這一行......我很困惑。在那裏很少有涵蓋Facebook SDK的Swift實現。任何想法爲什麼會發生這種情況?我沒有使用Facebook的API

+0

什麼是它崩潰時的錯誤信息? – 2014-11-22 02:13:17

+0

@Mike的Taverne它看起來像這樣 - > **線程1:信號SIGABRT **上變種對象= FBGraphObject.openGraphActionForPost()作爲FBOpenGraphObject [錯誤screengrab](https://dl.dropboxusercontent.com/u /2325675/stackoverflow/Social_swift%20error.png) ** ** swift_dynamicCastObjCProtocolUnconditional [錯誤screengrab](https://dl.dropboxusercontent.com/u/2325675/stackoverflow/Social_swift.png) – 2014-11-22 09:25:36

+0

任何想法@MikeTaverne ? – 2014-11-24 20:28:20

回答

0

我投類型FBGraphObject調用Facebook的範圍內。

我在你的例子使用不同的呼叫到一個,因爲我已經建立了與元數據的html頁面,但你的例子的重構將是如下:

var object = FBGraphObject.openGraphActionForPost() 

// Code to create object metadata omitted // 

FBRequestConnection.startForPostOpenGraphObject(object as FBGraphObject, completionHandler: { 
(connection:FBRequestConnection!, result:AnyObject!, error:NSError!) in 
    if error == nil { 
     let objectId = result["id"] 
    } else { 
     NSLog("Error posting the Open Graph object to the Object API:", error) 
    } 
}) 

我希望這有助於。

0

所以這充其量是一個受過教育的猜測:

var object = FBGraphObject.openGraphActionForPost() as NSMutableDictionary<FBOpenGraphObject> 
+0

真的很感謝@Mike的迴應。我可以看到如何有意義,但是,我得到一個「無法專門化非泛型類型'NSMutable Dictionary'」錯誤[錯誤screengrab](https://dl.dropboxusercontent.com/u/2325675/stackoverflow/Social_swift_generics。 png) – 2014-11-25 10:34:38

+0

對不起,丹,這就是我猜測的結果。我今天看到了更多,但我沒有看到Swift中的一種方法來完成他們希望你在ObjC中完成的任務。 – 2014-11-25 16:57:14

+0

你不能這麼做,因爲<>在Swift中意味着完全不同的東西。在Objective C中:'NSMutableDictionary '將使字典符合FBOpenGraphObject協議。 在Swift中,它意味着創建一個包含一組FBOpenGraphObjects的NSMutableDictionary。 – 2015-02-09 06:09:01