开发者

RequestDidLoad from fb api doesn't get called

I'm experiancing the next issue:

I have 3 classes that are taking data from Facebook API and are communicating through delegating. First class takes my friends, then for each friend 2nd class calls friend's events, return them and then for each friend's event, 3rd class calls event's ID to get full event infos. This is where the issue comes in, after calling 3rd class, the fb request api gets executed (requestLoading function gets started) but it doesn't wait in that class to get reply but just jumps out of the class.

Here is the code:

// Class 1:
// calling friends in first class
- (void) callFriendData
{
PicShowAppDelegate* appDelegate = (PicShowAppDelegate*)[[UIApplication sharedApplication] delegate];
Facebook *facebook = appDelegate.facebook;
[facebook requestWithGraphPath:@"me/friends" andDelegate:self];
}

// receiving friends + calling friend class for each friend in which we will call events
- (void)request:(FBRequest *)request didLoad:(id)result {
NSMutableArray *data = [result objectForKey:@"data"];
NSMutableArray *tmpFriendID = [data valueForKey:@"id"];
NSMutableArray *tmpFriendName = [data valueForKey:@"name"];
for(int i=0;i<[tmpFriendID count];i++)
{
    FBFriend *fbFriend = [[FBFriend alloc]init];
    [fbFriend setDelegate:self];
    fbFriend.friendID = [tmpFriendID objectAtIndex:i];
    fbFriend.friendName = [tmpFriendName objectAtIndex:i];
    [fbFriend takeEvents];

    [friendDataArray addObject:fbFriend];
    [fbFriend release];
}
}

// class 2,开发者_开发问答 friend, here I call events

- (void) takeEvents
{
PicShowAppDelegate* appDelegate = (PicShowAppDelegate*)[[UIApplication sharedApplication] delegate];
Facebook *facebook = appDelegate.facebook;
[facebook requestWithGraphPath:[NSString stringWithFormat:@"%@/events",self.friendID] andDelegate:self];
}

// receiving events for certain user
- (void)request:(FBRequest *)request didLoad:(id)result {
....

// sending events back to 1st class
[[self delegate] eventsTaken:eventIDs fromFriendID:self.friendID];
}

// first class receives events for certain user, saves it to array of 
//user's events and then calls 3rd class for each event in array, to get full info
- (void) eventsTaken: (NSArray *)idEvents  fromFriendID: (NSString*) idFrenda
{

for(int i=0;i<[friendDataArray count];i++)
    if([[[friendDataArray objectAtIndex:i] valueForKey:@"friendID"] isEqual:idFrenda])
        for(int j=0;j<[idEvents count];j++)
        {
            Event *event = [[Event alloc] init];
            event.eventID=[idEvents objectAtIndex:j];
            [event takeEvent];

            [event release];
        }
}

// 3rd class, event
-(void) takeEvent
{
PicShowAppDelegate* appDelegate = (PicShowAppDelegate*)[[UIApplication sharedApplication] delegate];
Facebook *facebook = appDelegate.facebook;
[facebook requestWithGraphPath:[NSString stringWithFormat:@"%@",self.eventID] andDelegate:self];

}

// this never gets called
- (void)request:(FBRequest *)request didLoad:(id)result {
....
}


Just assuming this object has a own Delegate. Did you set the Facebook's delegate property to your Controller?

[facebook setDelegate:(id)self];

Implement the Delegate also, in your .h file's @interface

@interface myViewController : UIViewController <FacebookDelegate>

or something vaguely similar.

Hope this helps!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜