gpt4 book ai didi

ios - 适用于 iOS 的 Facebook SDK,fbDidLogin 从未在多 nib 应用程序中调用

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:51:46 25 4
gpt4 key购买 nike

这是我第一次发帖,平时都是过来研究问题的,但是这个我自己搞不明白。

基本上我的问题类似于其他使用 iOS 版 facebook sdk 的开发人员,我的 fbDidLogin 函数即使在我登录后也不会被调用,并且可以使我的帖子成功提供。我在这里查看了其他线程,例如 fbDidLogin never called (facebook-ios-sdk)fbDidLogin not called ,但是我没有成功。我的应用程序有一个已加载的主视图,按下按钮后,它会拉入第二个 Nib 并替换 View 。第二个 View Controller 具有 facebook 功能,我觉得我的问题可能是从 Appdelegate 连接到 secondViewController。我注意到示例应用程序中的所有内容都在 appdelegate 中设置,但这不是我的程序运行的方式。

我是 objective c 编程的新手,但到目前为止我在构建一些应用程序方面还不错,只是这个 facebook sdk 让我很烦。

我很感激人们可以向我提出的任何方向。谢谢。

部分代码如下:

- (void)login {
facebook=[[Facebook alloc]initWithAppId:FB_APP_ID];
NSLog(@"Inside login/post to wall function.");
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
@"mystuff",@"test",
@"mystuff", @"link",
@"mystuff", @"picture",
mystuff, @"name",
@"mystuff", @"caption",
@"mystuff", @"description",
@"mystuff", @"message",
nil];
[facebook dialog:@"feed" andParams:params andDelegate:self];
}

/**
* Invalidate the access token and clear the cookie.
*/
- (void)logout {
[facebook logout:self];
}

/**
* Called when the user has logged in successfully.
*/
-(void)fbDidLogin{
NSLog(@"Inside fbDidLogin function.");
}

/**
* Called when the user canceled the authorization dialog.
*/
-(void)fbDidNotLogin:(BOOL)cancelled {
NSLog(@"User did not login.");
}

最佳答案

这里的问题是,一旦授权过程完成,您的代表就不再存在了。我会创建一个实现 FBSessionDelegate 的类,并将其作为应用程序委托(delegate)的属性保存。现在,当您连接委托(delegate)时,将其设置为该属性。如果愿意,您也可以使用界面生成器将其连接起来。只需将委托(delegate)设置为您在应用委托(delegate)上定义的属性即可。

例如,您可以有一个类执行以下操作(这段代码涵盖了其中的 80% - 希望它能让您走上正确的轨道):

typedef void (^completionHandler)(id);

@interface FacebookController : NSObject <FBSessionDelegate>
{
completionHandler handler;
}

- (void)postToWallWithOptions:(NSDictionary *)options;
- (void)login:(completionHandler)handler;
- (void)fbDidLogin;

实现将是:

@implementation FacebookController

- (void)postToWallWithOptions:(NSDictionary *)options
{
completionHandler handler = ^(id data)
{
// If you want this class to also be the delegate dialog, it will need to implement FBDialogDelegate
[facebook dialog:@"feed"
andParams:options
andDelegate:self];
};
[self login:handler];
}

- (void)login:(completionHandler)handler
{
completionHandler = handler;
// Be sure to add in your permissions here
[facebook authorize:yourPermissions
delegate:self];
}

- (void)fbDidLogin
{
// You could pass any object you needed to here
completionHandler(nil);
}

@end

您需要将此类定义为应用程序委托(delegate)的属性:

@property (nonatomic, retain) FacebookController *fbController;

现在,只要你需要你的 FacebookController,你就可以这样做:

FacebookController *fbController = [(MyAppDelegate *)[[UIApplication sharedApplication] delegate] fbController];

关于ios - 适用于 iOS 的 Facebook SDK,fbDidLogin 从未在多 nib 应用程序中调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6901313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com