Facebook API - How to cancel Graph Request

后端 未结 9 1039
既然无缘
既然无缘 2020-12-16 04:06

I occasionally need to cancel a FaceBook graph request, but there seems to be no cancel or similar method in their API to do so. At the moment, crashes sometimes occur as th

9条回答
  •  感情败类
    2020-12-16 04:52

    Updated on 22/April/2012

    I update Matt's version with the most up-to-date Facebook iOS SDK. My Project is using ARC, but I include the non-ARC Facebook sources so that I can modify the codes. (Of Course, we need to set the "-fno-objc-arc" flag for Facebook source files). The tricky part is to prevent the memory leak, and I think I am doing it correctly. But When I test it in the instrument, I still see very small amount of memory leak. Fortunately, the details show that they are not related to these codes, so I just assume they are related to the app resource handling.

    Here is the code I implemented:

    // Add to Facebook.h
    - (void)cancelPendingRequest:(FBRequest *)releasingRequest; 
    

    And...

    // Add to Facebook.m
    - (void)cancelPendingRequest:(FBRequest *) releasingRequest{
        [releasingRequest.connection cancel];
        [releasingRequest removeObserver:self forKeyPath:requestFinishedKeyPath];
        [_requests removeObject:releasingRequest];    
    }
    

    And in your project which uses FBRequestDelegate

    // Declare this member or property to the .h file
    FBRequest * currentFbRequest;
    
    // Declare this method
    -(void)cancelFBRequest;
    

    And ...

    // In .m file
    AppDelegate * appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    // prepare your necessary request data and parameter ...
    currentFbRequest = [appDelegate.facebook requestWithGraphPath:@"/me/photos" 
        andParams:params 
        andHttpMethod:@"POST" 
        andDelegate:self];
    
    
    
    // Then in the method where you want to cancel
    AppDelegate * appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    [appDelegate.facebook cancelPendingRequest:currentFbRequest];
    currentFbRequest=nil;
    

提交回复
热议问题