ACAccountStore错误6(ACErrorAccountNotFound)和8

我正在尝试使用以下代码从ACAccountStore获取帐户:

- (void) facebookLoginOnSuccess: (void (^)(void)) successBlock onError:(void(^)(NSError *error))errorBlock{ self.facebookPermissions = @[ @"offline_access", @"publish_stream", @"user_birthday", @"user_location", @"email" ]; NSDictionary *options = @{ @"ACFacebookAppIDKey": [[NSBundle mainBundle] objectForInfoDictionaryKey:@"FacebookAppID"], @"ACFacebookAppVersionKey": @"1.0", @"ACFacebookPermissionsKey": self.facebookPermissions, @"ACFacebookPermissionGroupKey": @"write" }; [self accountLoginFor:ACAccountTypeIdentifierFacebook withOptions:options OnSuccess:successBlock onError:errorBlock]; } - (void) accountLoginFor: (NSString *) accountTypeID withOptions: (NSDictionary *) options OnSuccess: (void (^)(void)) successBlock onError:(void(^)(NSError *error))errorBlock{ ACAccountStore *accountStore = [[ACAccountStore alloc] init]; ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:accountTypeID]; [accountStore requestAccessToAccountsWithType:accountType options:options completion:^(BOOL granted, NSError *error){ if (granted){ NSArray *accountsArray = [accountStore accountsWithAccountType:accountType]; NSLog(@"%@",accountsArray); } else { NSLog(@"Error accessing account: %@", [error localizedDescription]); } }]; } 

但是我得到这个错误:

 Error Domain=com.apple.accounts Code=6 "The operation couldn't be completed. (com.apple.accounts error 6.)" 

我找不到任何相关的东西,只是这个问题 。 任何想法可能是错的?

更新

我在Apple Developer Docs上find了这个。

帐户框架

在请求访问Facebook帐户时,选项字典中唯一需要的密钥是ACFacebookAppIdKey。 ACFacebookPermissionGroupKey和ACFacebookAppVersionKey现在已经过时。

如果您根据ACFacebookPermissionsKey( 例如publish_stream)申请写入权限,则必须为ACFacebookAudienceKey(可以是ACFacebookAudienceEveryoneACFacebookAudienceFriendsACFacebookAudienceOnlyMe)之一提供值。

所以我改变了我的select:

  NSDictionary *options = @{ @"ACFacebookAppIDKey": [[NSBundle mainBundle] objectForInfoDictionaryKey:@"FacebookAppID"], @"ACFacebookPermissionsKey": self.facebookPermissions, @"ACFacebookAudienceKey": ACFacebookAudienceFriends }; 

但是我得到了同样的错误。

好的,如果你还没有从iOS 6的设置中设置一个帐户,它会抛出错误代码6 。 如果用户只是拒绝它的权限而不是抛出错误代码7 。 在情况6我build议你要求用户首先在设置中设置她的帐户。

 NSDictionary *options = @{ ACFacebookAppIdKey: @"1234567890", ACFacebookPermissionsKey: @[@"publish_stream"], ACFacebookAudienceKey: ACFacebookAudienceFriends }; [self.accountStore requestAccessToAccountsWithType:facebookAccountType options:options completion:^(BOOL granted, NSError *error) { if (granted) { NSArray *accounts = [self.accountStore accountsWithAccountType:facebookAccountType]; if([accounts count]>0) self.facebookAccount = [accounts lastObject]; } else { dispatch_async(dispatch_get_main_queue(), ^{ // Fail gracefully... NSLog(@"%@",error.description); if([error code]== ACErrorAccountNotFound) [self throwAlertWithTitle:@"Error" message:@"Account not found. Please setup your account in settings app."]; else [self throwAlertWithTitle:@"Error" message:@"Account access denied."]; }); } }]; 

jAmi有正确的想法,但我不喜欢代码中的幻数。 有一个枚举有内置的数字(ACErrorCode)。

我自己的解决scheme是使用Facebook SDK,而不是直接尝试与lib,现在它的工作。