gpt4 book ai didi

facebook - requestAccessToAccountsWithType 后更新 UI

转载 作者:行者123 更新时间:2023-12-03 16:41:54 25 4
gpt4 key购买 nike

我正在开发一个应用程序来帮助我了解 OBJECTIVE-X/OSX。

该应用只需连接到 Facebook 并使用 NSUserNotification 发送通知。它工作正常,但现在我想添加一些 UI。

为了使示例更简单,我想更新标签 (NSTextField) 以显示 Facebook 连接的状态。

  1. 正在连接...

  2. 已连接

  3. 失败

我在一个文件 FacebookRequest.m

中包含以下代码
- (void) connectFacebook{

if(self.account == nil){
self.account = [[ACAccountStore alloc]init];
}

ACAccountType *facebookAccount = [self.account
accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];

NSDictionary *options = @{
ACFacebookAppIdKey: @"MY_CODE",
ACFacebookPermissionsKey: @[@"email",
@"user_about_me",
@"user_likes",
@"manage_notifications",
@"user_activities"],
ACFacebookAudienceKey: ACFacebookAudienceFriends
};
[self.account requestAccessToAccountsWithType:facebookAccount
options:options
completion:^(BOOL success, NSError *error){

if(success){
NSArray *accounts = [self.account accountsWithAccountType:facebookAccount];
self.account = [accounts lastObject];
}
else{
NSLog(@"Erro %@", [error description]);
}

}];

}

以及我的AppDelegate.m

中的以下一个
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[self.statusFacebook setStringValue:@"Connecting…"];
FacebookRequest *request = [[FacebookRequest alloc]init];
[request connectFacebook];
}

请求完成并且我拥有帐户后更新 UI 的最佳方式是什么?

我遇到了麻烦,因为请求是异步的,并且我无法在 requestAccessToAccountsWithType block 内返回任何值。另一点是,如果我在后面添加一些“if”来检查我的帐户是否为零,那么它将在 block 执行完毕之前执行,因此帐户仍然是nil

谢谢!

PS:如果英文不够清晰,请见谅。

最佳答案

您可以使用 NSNotificationCenter 来实现此目的:

[self.account requestAccessToAccountsWithType:facebookAccount 
options:options
completion:^(BOOL success, NSError *error){

if(success){
NSArray *accounts = [self.account accountsWithAccountType:facebookAccount];
self.account = [accounts lastObject];
// You post a notification that the UI should update here
[[NSNotificationCenter defaultCenter] postNotificationName:@"UpdateUI" object:nil];
}
else{
NSLog(@"Erro %@", [error description]);
}

}];

然后,您添加应该更新其 UI 的 viewController 作为此通知的观察者:

- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateUI) name:@"UpdateUI" object:nil];

}
- (void)updateUI {
// Here you actually update your UI
}

附:如果您不使用 arc,您还可以在 dealloc 中删除观察者:

 - (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];

关于facebook - requestAccessToAccountsWithType 后更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16410546/

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