2012-04-04 4 views
1

Ich mache eine app, in die ich ein facebook share (feed) dialog integrieren muss. Ich habe alles auf https://developers.facebook.com/docs/mobile/ios/build/ gelesen, und ich konnte facebook share (feed) -Dialog laden, wenn die App fertig gestartet wurde. Aber mein Problem ist, dass ich xcode 4.3 verwende, d. H. Storyboard, und ich möchte den Facebook-Feed-Dialog auf Knopfdruck laden.popup facebook füttern dialog (für pinnwand posten) in ios xcode 4,3 (storyboard)

machte ich eine andere Ansicht-Controller, und fügen Sie das ganze Zeug von Funktion AppDelegate (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

in seiner -(void) viewDidload und war in der Lage „Login-Seite“ zu laden und dann Seite meiner „Facebook-App“.

Danach, wenn ich die Erlaubnis, meine Facebook-App erlauben es nicht "feed Dialog" besagen

Hier ist meine viewController.h Datei

#import "FBConnect.h" 

@interface ViewController : UIViewController<FBSessionDelegate,FBDialogDelegate> 
{ 
    Facebook *facebook; 
} 
@property (nonatomic, retain) Facebook *facebook; 

@end 

-Hier meine ViewController.m Datei ist

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 

@synthesize facebook=_facebook; 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    facebook = [[Facebook alloc] initWithAppId:@"284727404938450" andDelegate:self]; 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    if ([defaults objectForKey:@"FBAccessTokenKey"] 
     && [defaults objectForKey:@"FBExpirationDateKey"]) { 
     facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"]; 
     facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"]; 
    } 

    if (![facebook isSessionValid]) { 
     [facebook authorize:nil]; 
    }   
}  

- (void)fbDidLogin { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"]; 
    [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"]; 
    [defaults synchronize]; 

    [facebook dialog:@"feed" andDelegate:self];  
} 

aber hier sind zwei Methoden, die in AppDelegate Datei verwendet werden

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url 
    sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { 
    return [ facebook] handleOpenURL:url]; 
} 

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    return [ facebook] handleOpenURL:url]; 
} 

Ich weiß, in xib, dass diese Methoden sein sollten:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
     return [[_ViewController facebook] handleOpenURL:url]; 
    } 

// For iOS 4.2+ support 
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url 
    sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { 
    return [[_ViewController facebook] handleOpenURL:url]; 
} 

Dieses Verfahren verantwortlich sind, einen Feed-Dialog für die aktuelle „facebook“ Instanz (Face * facebook) für Aufspringen.

Mein Problem ist, dass wir im Storyboard kein "Fenster" haben und Controller-Intents anzeigen, also denke ich, dass diese beiden Methoden nicht für die facebook-Instanz meines aktuellen ViewControllers aufgerufen werden. Wie kann ich diese beiden Funktionen für meine "facebook" -Instanz aufrufen, wobei mein viewController keine Instanz der AppDelegate-Datei ist?

Bitte helfen Sie mir.

Antwort

0

Sie können eine Referenz Ihres Viewcontrollers im _viewcontroller des Anwendungsdelegaten übergeben, bevor Sie Facebook verwenden (oder diese Delegatfunktionen aufrufen).

Ihre Ansicht Controller viewDidLoad() wie wie unten aussehen:

-(void)viewDidLoad{ 



[[UIApplication sharedApplication] delegate]._viewComtroller = self; // pass reference to the appdalegate 



// Other code (or call the facebook function here) 

}

wird es

0

Seien Sie vorsichtig, weil Sie einen Ivar namens "facebook" und eine Eigenschaft namens "facebook" definieren, die einen anderen Ivar namens "_facebook" erstellt. Dann auf Ihrem Code arbeiten Sie mit dem Ivar "facebook", wenn Sie also anrufen [_ViewController facebook] Sie Zugriff auf die Eigenschaft (ivar _facebook) und nicht die Ivar "Facebook", die Sie initialisiert haben.

Ich glaube nicht, dass dies die Antwort ist, die Sie suchten, aber es schien wichtig, darauf hinzuweisen.

Viel Glück!

0

Nun ja, eine Lösung implementieren könnte die Facebook Delegatmethoden im AppDelegate, dann in Ihrem Viewcontroller in der viewDidLoad Methode oder der Methode, die Sie bevorzugen, verwenden

AppDelegate *appDelegate= (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
[appDelegate.facebook authorize:permissions]; 

wo Berechtigungen ist ein Array mit den Berechtigungen, die Sie benötigen.Das sollte funktionieren und die Methoden

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url 
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { 
    return [ facebook] handleOpenURL:url]; 
} 

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
return [ facebook] handleOpenURL:url]; 
} 

werden durchgeführt.

+0

Dank arbeiten werden, war es sehr hilfreich ... –