2014-11-22 3 views
3

Я создаю собственную историю с помощью iOS SDK для Facebook, приложение написано в Swift. Я основывал свой код на примере их документации https://developers.facebook.com/docs/ios/open-graph#createobject.Создание объекта Facebook с открытым графиком с использованием Swift

Все проходит гладко, пока я не создать FBGraphObject

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

в Swift я переписан этот кусок, как:

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 

Проблема в том, что теперь, когда я сейчас компилирую это и запускаю приложение, он сбой в этой строке ... Я озадачен. Там очень мало средств для Swift-реализации SDK для Facebook. Любые идеи, почему это произойдет?

+0

Какое сообщение об ошибке при сбое? –

+0

Таверна @ Mike Похоже, что это -> ** Тема 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) –

+0

Любые идеи @MikeTaverne ? –

ответ

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

Я не использовал API Facebook, так что это в лучшем случае догадка:

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

Действительно оцените ответ @Mike. Я могу понять, как это имеет смысл, однако я получаю сообщение «Невозможно специализировать нестандартный тип« NSMutable Dictionary »« error [error screengrab] (https://dl.dropboxusercontent.com/u/2325675/stackoverflow/Social_swift_generics. png) –

+0

Прости, Дэн, это то, что я догадываюсь. Сегодня я посмотрел на это еще немного, но я не вижу возможности в Swift сделать то же, что они хотят, чтобы вы делали в ObjC. –

+0

Вы не можете этого сделать, потому что <> означает совсем другое в Swift. В Objective C: 'NSMutableDictionary ' будет соответствовать словарю протоколу FBOpenGraphObject. В Swift это означает создание NSMutableDictionary, который содержит набор FBOpenGraphObjects. –

Смежные вопросы