使用Swift创建Facebook Open Graph对象

问题描述:

我使用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/*/Social_swift%20error.png) ** ** swift_dynamicCastObjCProtocolUnconditional [错误screengrab](https://dl.dropboxusercontent.com/u/2325675/*/Social_swift.png) – 2014-11-22 09:25:36

+0

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

我投类型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) 
    } 
}) 

我希望这有助于。

所以这充其量是一个受过教育的猜测:

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

真的很感谢@Mike的回应。我可以看到如何有意义,但是,我得到一个“无法专门化非泛型类型'NSMutable Dictionary'”错误[错误screengrab](https://dl.dropboxusercontent.com/u/2325675/*/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