FBRequestDelegate didReceiveResponse, как узнать, для какого запроса этот ответ - PullRequest
4 голосов
/ 04 марта 2011

Я использую последнюю версию Facebook iphone SDK, я делаю несколько запросов на Facebook из разных мест в моем приложении.Для всех из них вызваны методы didReceiveResponse и didLoad, из метода didLoad очень трудно выяснить, для какого запроса был этот ответ, поэтому мне интересно, может ли didReceiveResponse помочь, могу ли я получить некоторую информацию в этом методе, которая скажет мне, чтобыл запрос, на который я получил ответ.

Ответы [ 4 ]

1 голос
/ 29 марта 2012

То, как я это делаю, во многом аналогично тому, как это делает Зиминджи, но в методе didLoad:

- (void)request:(FBRequest *)request didLoad:(id)result
{
    NSLog(@"Facebook request %@ loaded", [request url]);

    //handling a user info request, for example
    if ([[request url] rangeOfString:@"/me"].location != NSNotFound)
    {
        /* handle user request in here */
    }
}

Так что в основном вам нужно только проверить URL-адрес, на который вы отправили запрос, и вы можететакже проверьте параметры для этого запроса.Тогда вы можете отличить одно от другого.

0 голосов
/ 10 марта 2011

Вы можете попробовать что-то вроде следующего:

- (void) request: (FBRequest *)request didReceiveResponse: (NSURLResponse *)response {
    NSInteger statusCode = [(NSHTTPURLResponse *)response statusCode];
    if (statusCode == 200) {
        NSString *url = [[response URL] absoluteString];
        if ([url rangeOfString: @"me/feed"].location != NSNotFound) {
            NSLog(@"Request Params: %@", [request params]);

            UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"Facebook" message: @"Message successfully posted on Facebook." delegate: nil cancelButtonTitle: @"OK" otherButtonTitles: nil];
            [alert show];
            [alert release];
        }
    }
}
0 голосов
/ 27 февраля 2012

Если вы сохраняете объект запроса как свойство вашего делегата запроса при его создании, вы можете проверить, соответствует ли он вызовам метода делегата.Например:

- (void)queryForUserInfo {
   self.userInfoRequest = [facebook requestWithGraphPath:@"me" andDelegate:self];
}


#pragma mark <FBRequestDelegate>

- (void)request:(FBRequest *)request didLoad:(id)result {
    if (request == self.userInfoRequest) {
       [self handleUserInfoResult:result];
    }
}
0 голосов
/ 07 марта 2011

Все, что я делаю здесь, я проверяю какой-то уникальный атрибут в ответе и связываю его с запросом, я знаю, что это не лучший способ сделать, но это то, что я нашел до сих пор, пожалуйста, дайте мнея знаю, если кто-то делает это по-другому

...