1

iOS開発初心者です。Facebook SDK を使用して Facebook から友達を取得するときにエラーが発生しました。私のコードは次のとおりです。

Facebookクラス

- (void)fetchFacebookFriend{
    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    NSArray *permissions = [[NSArray alloc] initWithObjects:
                            @"user_birthday",@"friends_hometown",
                            @"friends_birthday",@"friends_location",@"friends_work_history",
                            nil];

    if (!FBSession.activeSession.isOpen) {
        // if the session is closed, then we open it here, and establish a handler for state changes
        [FBSession openActiveSessionWithReadPermissions:permissions
                                           allowLoginUI:YES
                                      completionHandler:^(FBSession *session,
                                                          FBSessionState state,
                                                          NSError *error) {

                                          if (error != nil) {
                                              NSLog(@"Failed to retrive facebook friend.");
                                              return;
                                          }
                                          else{

                                              self.myArray = [[NSMutableArray alloc] init];
                                              NSLog(@"permissions::%@",FBSession.activeSession.permissions);

                                              FBRequest *friendRequest = [FBRequest requestForGraphPath:@"me/friends?fields=name,picture,birthday,hometown,location,work"];
                                              [friendRequest startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
                                                  appDelegate.myFacebookArray = [[NSMutableArray alloc] init];
                                                  for (NSDictionary *fbData in [result objectForKey:@"data"]) {
                                                      NSLog(@"%@",fbData);
                                                      [self.myArray addObject:fbData];

                                                  }

                                              }];


                                          }
                                      }];
        return;
    }
}

ViewController

- (IBAction)pickFriendPressed:(id)sender {
    NSLog(@"##Begin");
    [[FacebookClass sharedInstance] fetchFacebookFriend];
    NSLog(@"##End");
}

出力

##Begin
##End
Json data

##End.Thanksを表示した後、Jsonデータを取得するのを手伝ってください

4

2 に答える 2

0

フレンド情報を取得するコード サンプルを次に示します。

    [facebook requestWithGraphPath:@"me/friends" 
                         andParams:[ NSDictionary dictionaryWithObjectsAndKeys:@"picture,id,name,link,gender,last_name,first_name",@"fields",nil]
                       andDelegate:self];

覚えておいてください:

適切なデリゲート メソッドを実装する フレンド情報を取得する前に、authorize を呼び出す必要があります。これにより、ユーザーは最初にログインできるようになります。これがお役に立てば幸いです、乾杯

于 2013-07-13T04:36:31.833 に答える
0

これを試して:

を使用してフレンドリストを取得する

[FBRequest requestForMyFriends];

FBRequest* friendsRequest = [FBRequest requestForMyFriends];

[friendsRequest startWithCompletionHandler: ^(FBRequestConnection connection,NSDictionary result,NSError error) { NSArray friends = [result objectForKey:@"data"]; ……

コーディングは次のとおりですが、主な行は [FBRequest requestForMyFriends];

-(void)sessionStateChanged:(FBSession *)session state:(FBSessionState)state error:(NSError *)error {
    switch (state) {
        case FBSessionStateOpen: {
            if (self != nil) {
                [[FBRequest requestForMe] startWithCompletionHandler: ^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) {
                    if (error) {
                        //error
                    }else{
                        FBRequest* friendsRequest = [FBRequest requestForMyFriends];
                        [friendsRequest startWithCompletionHandler: ^(FBRequestConnection *connection,NSDictionary* result,NSError *error) {
                            NSArray* friends = [result objectForKey:@"data"];

                            for (int i = 0; i < [arrFacebookFriends count]; i++) {
                                UserShare *shareObj = [arrFacebookFriends objectAtIndex:i];
                                [shareObj release];
                                shareObj = nil;
                           }
                           [arrFacebookFriends removeAllObjects];

                            for (NSDictionary<FBGraphUser>* friend in friends) {
                                UserShare *shareObj = [[UserShare alloc] init];
                                shareObj.userName = friend.name;
                                shareObj.userFullName = friend.username;
                                shareObj.userId = [friend.id intValue];
                                NSLog(@"%@",friend.id);
                                shareObj.userPhotoUrl = [NSString stringWithFormat:@"https://graph.facebook.com/%@/picture?", friend.id];
                                [arrFacebookFriends addObject:shareObj];
                                [shareObj release];
                            }
                            [self StopSpinner];
                            [tblFacebookFriends reloadData];
                        }];
                     }
                }];
            }
            FBCacheDescriptor *cacheDescriptor = [FBFriendPickerViewController cacheDescriptor];
            [cacheDescriptor prefetchAndCacheForSession:session];
        }
            break;
        case FBSessionStateClosed: {
            [self StopSpinner];
            UIViewController *topViewController = [self.navigationController topViewController];
            UIViewController *modalViewController = [topViewController modalViewController];
            if (modalViewController != nil) {
                [topViewController dismissViewControllerAnimated:YES completion:nil];
            }
            //[self.navigationController popToRootViewControllerAnimated:NO];

            [FBSession.activeSession closeAndClearTokenInformation];

            [self performSelector:@selector(showLoginView) withObject:nil afterDelay:0.5f];
        }
            break;
        case FBSessionStateClosedLoginFailed: {
            [self StopSpinner];
            [self performSelector:@selector(showLoginView) withObject:nil afterDelay:0.5f];
        }
            break;
        default:
            break;
    }

    [[NSNotificationCenter defaultCenter] postNotificationName:SCSessionStateChangedNotificationFL object:session];

    if (error) {
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"Error: %@", [FacebookFriendsListViewController FBErrorCodeDescription:error.code]] message:error.localizedDescription delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alertView show];
        [alertView release];
    }
}

FBFriendPickerViewController iOS を開かずに友達のリストを取得する方法で、私が受け入れたこの回答を参照してください。

于 2013-07-13T05:32:14.183 に答える