OBJECTIVE-X/OSX を理解するのに役立つアプリを開発しています。
アプリは単に Facebook に接続し、 を使用して通知を送信しNSUserNotification
ます。正常に動作していますが、UI をミックスに追加したいと考えています。
例を簡単にするために、ラベル ( NSTextField
) を更新して、Facebook 接続のステータスを表示したいと考えています。
接続中…</p>
接続済み
失敗した
1つのファイルに次のコードがあります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
リクエストが非同期で、ブロック内で値を返すことができないため、問題が発生しています。もう 1 つのポイントは、アカウントが nil であるかどうかを確認するために「if」を配置すると、ブロックの実行が完了する前に実行されるため、アカウントはnil
.
ありがとう!
PS .: 十分に明確でない場合は、英語で申し訳ありません。