2014-11-22 4 views
3

Facebook iOS SDK를 사용하여 맞춤 스토리를 만들고 있는데,이 앱은 Swift로 작성되었습니다. 내 코드 예제를 https://developers.facebook.com/docs/ios/open-graph#createobject에 기반하여 작성했습니다.Swift를 사용하여 Facebook Open Graph 개체 만들기

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가 동일하지 않은 내가

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

스위프트에 나는대로이 덩어리를 다시 작성했다

FBGraphObject을 만들 때까지

모든 것이 원활하게 실행 FBOpenGraphObject, 무슨 의미인지, 문서를 읽고 FBOpenGraphObject 그냥 NSMutableDictionary을 입고 그래서 나는 오류를 해결 FBOpenGraphObject로 개체를 캐스팅

var object = FBGraphObject.openGraphActionForPost() as FBOpenGraphObject 

문제는, 지금 내가 이것을 컴파일하고 실행할 때이 줄에서 충돌합니다 ... 저는 당황 스럽습니다. Facebook SDK를 신속하게 구현하는 방법은 거의 없습니다. 왜 이런 일이 일어날까요?

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

충돌 할 때 나타나는 오류 메시지는 무엇입니까? –

+0

@ 마이크 Taverne 당시 그것은 다음과 같다 - " ** 스레드 1 : 신호 SIGABRT ** VAR 개체 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에 형태 캐스트 : 나는 페이스 북의 API를 사용하지 않은

0

은 그래서 이것은 기껏해야 추측이다. 나는 메타 데이터와 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

정말 감사합니다 @ 마이크. 그러나 그것이 "NSMutable Dictionary가 아닌 제네릭 형식을 전문화 할 수 없습니다"오류가 발생하는 것을 알 수 있습니다. [오류 screengrab] (https://dl.dropboxusercontent.com/u/2325675/stackoverflow/Social_swift_generics. png) –

+0

미안 해요, 댄, 그게 내가 짐작할 수있는거야. 오늘 좀 더 살펴 봤지만 Swift에서 ObjC에서 원하는 것과 동일한 작업을 수행 할 수있는 방법이 없습니다. –

+0

<>는 Swift에서 완전히 다른 것을 의미하기 때문에 그렇게 할 수 없습니다. Objective C에서 :'NSMutableDictionary '는 사전을 FBOpenGraphObject 프로토콜과 일치시킵니다. Swift에서는 FBOpenGraphObjects를 포함하는 NSMutableDictionary를 만드는 것을 의미합니다. –