2013-05-07 2 views
4

Я искал Google и SO и не могу найти, что такое com.apple.accounts Код ошибки 8. Я пытаюсь использовать iOS 6 и SDK для Facebook.Получение «кода ошибки 8» при вызове [ACAccountStore requestAccessToAccountsWithType] - iOS Facebook

Я выполняю этот запрос;

if (!_accountStore) _accountStore = [[ACAccountStore alloc] init]; 

ACAccountType *fbActType = [_accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]; 


NSDictionary *options = [[NSDictionary alloc] initWithObjectsAndKeys: 
         (NSString *)ACFacebookAppIdKey, @"###############", 
         (NSString *)ACFacebookPermissionsKey, [NSArray arrayWithObject:@"email"], 
         nil]; 



[_accountStore requestAccessToAccountsWithType:fbActType options:options completion:^(BOOL granted, NSError *error) { 
              if (granted) { 
               NSLog(@"Success"); 
               NSArray *accounts = [_accountStore accountsWithAccountType:fbActType]; 
               _facebookAccount = [accounts lastObject];              
              } else { 
               NSLog(@"ERR: %@",error); 
               // Fail gracefully... 
              } 
     } 
]; 

Я получаю эту ошибку:

ERR: Error Domain=com.apple.accounts Code=8 "The operation couldn’t be completed. (com.apple.accounts error 8.)"

Независимо от того, что я делаю, granted никогда не возвращает истину. Любые идеи были бы очень оценены.

Если я обойти if(granted) и вызвать эту функцию:

- (void)me{ 

    NSLog(@"Home.m - (void)me"); 

    NSURL *meurl = [NSURL URLWithString:@"https://graph.facebook.com/me"]; 

    SLRequest *merequest = [SLRequest requestForServiceType:SLServiceTypeFacebook 
               requestMethod:SLRequestMethodGET 
                 URL:meurl 
               parameters:nil]; 

    merequest.account = _facebookAccount; 

    [merequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { 
     NSString *meDataString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 

     NSLog(@"%@", meDataString); 

    }]; 

Затем я вижу это JSON, возвращаемый Facebook: {"error":{"message":"An active access token must be used to query information about the current user.","type":"OAuthException","code":2500}}}

Update: Таким образом, ошибка означает «клиента словарь информации о доступе имеет неправильные или отсутствующие значения. " но я не знаю, что это значит.

+0

На устройстве или Sim? – Undo

+0

iPod Touch работает iOS 6.0 – Chris

+0

Записан в FaceBook в настройках, не так ли? – Undo

ответ

13

В словарях параметров есть ошибка.

NSDictionary *options = [[NSDictionary alloc] initWithObjectsAndKeys: 
        (NSString *)ACFacebookAppIdKey, @"###############", 
        (NSString *)ACFacebookPermissionsKey, [NSArray arrayWithObject:@"email"], 
        nil]; 

лучше читать декларацию метод: «словарь с объектом и ключами», поэтому первый объект, затем ключ ... но вы вставили первые КЛЮЧИ, а затем ОБЪЕКТОВ (неправильный заказ :-)

The правильный словарь:

NSDictionary *options = [[NSDictionary alloc] initWithObjectsAndKeys: 
         @"###############", ACFacebookAppIdKey, 
         [NSArray arrayWithObject:@"email"], ACFacebookPermissionsKey, 
         nil]; 

или, объявляя словарь буквального:

NSDictionary *options = @{ 
           ACFacebookAppIdKey : @"###############", 
           ACFacebookPermissionsKey : [NSArray arrayWithObject:@"email"] 
          }; 
+0

Спасибо. Определенно одна из проблем «Это слишком простая». – Chris

+0

В опции электронной почты нам нужно указать любой почтовый идентификатор –