Search code examples
objective-ciosfacebook-requests

Getting Facebook Profile Name and Picture IOS 5.1


I am having trouble getting facebook name and picture at the same time. I can take only one of them each request.

-(void)fbDidLogin{
    // Save the access token key info.
    [self saveAccessTokenKeyInfo];

    // Get the user's info.
    [facebook requestWithGraphPath:@"me/?fields=first_name,picture" andDelegate:self];

}

-(void)request:(FBRequest *)request didLoad:(id)result{

    if ([result isKindOfClass:[NSArray class]]) {

        result = [result objectAtIndex:0];

        if ([result objectForKey:@"first_name"]) {
            [lblUser setText:[NSString stringWithFormat:@"Welcome %@!", [result objectForKey:@"first_name"]]];
            // Show the publish button.
            [btnPublish setHidden:NO];
        }
    }
    else {
       imageView.image = [UIImage imageWithData:result];
    }      
}

The errors I get

__NSCFDictionary length]: unrecognized selector sent to instance
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary length]: unrecognized selector sent to instance 

If i approach with two requests

-(void)fbDidLogin{
    // Save the access token key info.
    [self saveAccessTokenKeyInfo];

    // Get the user's info.
    [facebook requestWithGraphPath:@"me/picture" andDelegate:self];
    [facebook requestWithGraphPath:@"me" andDelegate:self];
}

and with the same -(void)request:(FBRequest *)request didLoad:(id)result the error i get is

[__NSCFDictionary length]: unrecognized selector sent to instance

so how can i request to get facebook name and picture and how can handle incoming data?


Solution

  • I fixed it, following code works fine to get facebook name and profile picture

    -(void)request:(FBRequest *)request didLoad:(id)result{
        // With this method we’ll get any Facebook response in the form of an array.
        // In this example the method will be used twice. Once to get the user’s name to
        // when showing the welcome message and next to get the ID of the published post.
        // Inside the result array there the data is stored as a NSDictionary.    
    
    
        if ([result isKindOfClass:[NSData class]])
        {
            NSLog(@"Profile Picture");
            imageView.image = [UIImage imageWithData:result];
            //[profilePicture release];
            //profilePicture = [[UIImage alloc] initWithData: result];
        }
    
    
      if ([result isKindOfClass:[NSArray class]]) {
            // The first object in the result is the data dictionary.
    
            result = [result objectAtIndex:0];
    
    
        }
    
        if ([result isKindOfClass:[NSDictionary class]]) {
            // If the current result contains the "first_name" key then it's the user's data that have been returned.
            // Change the lblUser label's text.
            [lblUser setText:[NSString stringWithFormat:@"Welcome %@!", [result objectForKey:@"first_name"]]];
            // Show the publish button.
            [btnPublish setHidden:NO];
        }
    
    }