iOS RestKit, как отправить запрос с установленным объектом обратного вызова (userData)? - PullRequest
3 голосов
/ 08 марта 2012

Я пытаюсь создать запрос RestKit , чтобы загрузить изображение из веб-службы и добавить его к кнопке в качестве фонового изображения .Чтобы сделать это асинхронно, я пытаюсь добавить кнопку как userData к объекту RKRequest.

В чем я не уверен, так это в том, как отправить полностью сконфигурированный RKRequest, я пытался установить delegate, вызывая prepareURLRequest и sendAsynchronously.Метод, который я ожидаю отозвать, не вызывается.

- (void)didFinishLoad:(RKResponse*)response

Чтобы проверить, правильно ли настроен мой запрос, я отправил его через очередь запросов, и это работает.

Как правильно отправить полностью сконфигурированные запросы с объектом userData с помощью RestKit?

- (void)sendRequestForTrackerUserGravatar:(CoreDataButton*)coreDataButton {

/ * Это работает, но не разрешает объект пользовательских данныхбыть установленным, то есть я не знаю, какое изображение кнопки было загружено.

    NSMutableDictionary* paramsDictionary = [[NSMutableDictionary alloc] init];   
    [paramsDictionary setValue:@"identicon" forKey:@"d"];

[[RKClient sharedClient] get: [self gravatarMD5HashWithUserID: trackerUser.user_id.intValue] queryParams: paramsDictionary делегат: self];
* /

    //single request for a resource, includes a dictionary of parameters to be appended to the URL
    //    [paramsDictionary setValue:@"retro" forKey:@"d"];
    User* user = (User*)coreDataButton.managedObject;


    NSString* md5Hash = [self gravatarMD5HashWithUserID:user.user_id.intValue];
    NSString* urlString = [NSString stringWithFormat:@"%@%@?d=identicon",kGravatarWebsite,md5Hash];
    RKRequest* request = [[RKRequest alloc] initWithURL:[NSURL URLWithString:urlString] delegate:self];
    request.userData = coreDataButton;
    request.delegate = self;   
    request.cachePolicy = RKRequestCachePolicyEnabled;

//this works    
//[[RKRequestQueue sharedQueue] addRequest:request];


//this does not seem to call back the delegate method    
    [request prepareURLRequest];
    [request sendAsynchronously];

    }

//request callback, does not get called
- (void)didFinishLoad:(RKResponse*)response
{
    [self processResponse:response];
}

//queue callback, DOES get called
-(void)requestQueue:(RKRequestQueue *)queue didLoadResponse:(RKResponse *)response
{
    [self processResponse:response];
}

1 Ответ

5 голосов
/ 08 марта 2012

Эта строка:

[[RKClient sharedClient] get:[self gravatarMD5HashWithUserID:trackerUser.user_id.intValue] queryParams:paramsDictionary delegate:self];

фактически возвращает запрос, который был создан и затем отправлен, поэтому вы можете сделать:

- (void)request:(RKRequest *)request didLoadResponse:(RKResponse *)response {
    // get button like this
    UIButton* b = [request userData];
    // process the response and get image
    UIImage* i = [UIImage imageWithData:[self giveMeDataFromResponseNOW:response]]; //or however you handle responses
}
...