iOS RestKit如何使用回调对象(userData)设置发送请求?

Ale*_*one 3 iphone asynchronous objective-c ios restkit

我正在尝试创建一个RestKit请求来从Web服务加载图像并将其作为背景图像添加到按钮.为了异步这样做,我正在尝试将按钮作为userData添加到RKRequest对象.

我不确定如何发送完全配置的RKRequest,我尝试设置delegate,调用prepareURLRequestsendAsynchronously.我希望被回调的方法不会被调用.

- (void)didFinishLoad:(RKResponse*)response
Run Code Online (Sandbox Code Playgroud)

要检查我的请求是否已正确配置,我通过请求队列发送它,这是有效的.

使用RestKit使用userData对象发送完全配置的请求的正确方法是什么?

- (void)sendRequestForTrackerUserGravatar:(CoreDataButton*)coreDataButton {
Run Code Online (Sandbox Code Playgroud)

/*这有效,但不允许设置用户数据对象,这意味着我不知道加载了哪个按钮的图像.

    NSMutableDictionary* paramsDictionary = [[NSMutableDictionary alloc] init];   
    [paramsDictionary setValue:@"identicon" forKey:@"d"];
Run Code Online (Sandbox Code Playgroud)

[[RKClient sharedClient] get:[self gravatarMD5HashWithUserID:trackerUser.user_id.intValue] queryParams:paramsDictionary delegate: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];
}
Run Code Online (Sandbox Code Playgroud)

law*_*cko 5

这一行:

[[RKClient sharedClient] get:[self gravatarMD5HashWithUserID:trackerUser.user_id.intValue] queryParams:paramsDictionary delegate:self];
Run Code Online (Sandbox Code Playgroud)

实际上返回创建然后调度的请求,因此您可以执行以下操作:

RKRequest* r = [[RKClient sharedClient] get:[self gravatarMD5HashWithUserID:trackerUser.user_id.intValue] queryParams:paramsDictionary delegate:self];
[r setUserData:buttonReference];
Run Code Online (Sandbox Code Playgroud)

然后使用RKRequest委托方法捕获成功:

- (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
}
Run Code Online (Sandbox Code Playgroud)