iphone - Restkit 中的第二个请求时对象未加载

标签 iphone objective-c ios restkit objective-c-blocks

我使用 Restkit 同时发送 2 个请求,并且收到两个请求的响应,但只有其中一个请求接收到任何对象。如果我将它们一一发送出去,那么我的对象加载器就会收到所有对象。

第一个请求:

self.firstObjectManager = [RKObjectManager sharedManager];
[self.firstObjectManager loadObjectsAtResourcePath:[NSString stringWithFormat: @"/%@.json", subUrl] usingBlock:^(RKObjectLoader *loader){
    [loader.mappingProvider setObjectMapping:designArrayMapping forKeyPath:@""];
    loader.userData = @"design";
    loader.delegate = self;
    [loader sendAsynchronously];
}];

第二个请求:

self.secondObjectManager = [RKObjectManager sharedManager];
[self.secondObjectManager loadObjectsAtResourcePath:[NSString stringWithFormat: @"/%@.json", subUrl] usingBlock:^(RKObjectLoader *loader){
    [loader.mappingProvider setObjectMapping:designerMapping forKeyPath:@""];
    loader.userData = @"designer";
    loader.delegate = self;
    [loader sendAsynchronously];
}];

我的对象加载器:

-(void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects
{
    //NSLog(@"This happened: %@", objectLoader.userData);
    if (objectLoader.userData == @"design") {
        NSLog(@"Design happened: %i", objects.count);
    }else if(objectLoader.userData == @"designer"){
        NSLog(@"designer: %@", [objects objectAtIndex:0]);
    }

}

我的回复:

2012-11-18 14:36:19.607 RestKitTest5[14220:c07] Started loading of request: designer
2012-11-18 14:36:22.575 RestKitTest5[14220:c07] I restkit.network:RKRequest.m:680:-[RKRequest updateInternalCacheDate] Updating cache date for request <RKObjectLoader: 0x95c3160> to 2012-11-18 19:36:22 +0000
2012-11-18 14:36:22.576 RestKitTest5[14220:c07] response code: 200
2012-11-18 14:36:22.584 RestKitTest5[14220:c07] Design happened: 0
2012-11-18 14:36:22.603 RestKitTest5[14220:c07] I restkit.network:RKRequest.m:680:-[RKRequest updateInternalCacheDate] Updating cache date for request <RKObjectLoader: 0xa589b50> to 2012-11-18 19:36:22 +0000
2012-11-18 14:36:22.605 RestKitTest5[14220:c07] response code: 200
2012-11-18 14:36:22.606 RestKitTest5[14220:c07] designer: <DesignerData: 0xa269fc0>

更新:设置我的基本网址

RKURL *baseURL = [RKURL URLWithBaseURLString:@"http://iphone.meer.li"];
[RKObjectManager setSharedManager:[RKObjectManager managerWithBaseURL:baseURL]];

解决方案

问题是我对两个对象管理器都使用了共享管理器,所以我最终做了:

RKURL *baseURL = [RKURL URLWithBaseURLString:@"http://iphone.meer.li"];
RKObjectManager *myObjectManager = [[RKObjectManager alloc] initWithBaseURL:baseURL];
self.firstObjectManager = myObjectManager;

和:

RKURL *baseURL = [RKURL URLWithBaseURLString:@"http://iphone.meer.li"];
RKObjectManager *myObjectManager = [[RKObjectManager alloc] initWithBaseURL:baseURL];
self.secondObjectManager = myObjectManager;

最佳答案

使用 block 语法进行加载,

self.secondObjectManager = [RKObjectManager sharedManager];
[self.secondObjectManager loadObjectsAtResourcePath:[NSString stringWithFormat: @"/%@.json", subUrl] usingBlock:^(RKObjectLoader *loader){
    [loader.mappingProvider setObjectMapping:designerMapping forKeyPath:@""];
    loader.userData = @"designer";
     loader.onDidLoadObjects = ^(NSArray *objects){
         NSLog(@"Loaded objects %@", objects);
      };
     loader.onDidFailedWithError = ^(NSError *error){
        NSLog(@"Failed with error %@", error.userInfo);
   }
}];

编辑

使用你自己的对象管理器并保留它,然后以这种方式使用它,

不要使用sharedManager,而是分配/初始化它并为其提供对象存储并查看。希望这对您有帮助,

[self.objectManager loadObjectsAtResourcePath:resourcePath usingBlock:^(RKObjectLoader *loader){
        [loader.mappingProvider setMapping:[MyClass mapping] forKeyPath:@""];
        loader.onDidLoadObjects = ^(NSArray *objects){

        };
        loader.onDidLoadResponse = ^(RKResponse *response){
            NSLog(@"Loaded response %@", response.bodyAsString);
        };
        loader.onDidFailLoadWithError = ^(NSError *error){
            NSLog(@"Error occurred ... %@", error.userInfo);

        };
    }];

关于iphone - Restkit 中的第二个请求时对象未加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13443919/

相关文章:

iphone - 防止UIWebView全屏旋转

ios - 如何在 UINavigationBar 上设置图像

ios - 我如何在 Swift 中制作像 "Android Navigation Drawer Menu"这样的重叠菜单

ios - Crashlytics何时在iOS上发送日志?

ios - 如何通过 ios 中的继承访问私有(private)声明的属性

iphone - 在 iPhone 的 Xcode 中调试线程

javascript - 我将如何使用 javascript/jquery 进行两指拖动?

iphone - 左侧的 UITableView 图像

iOS - 从 UITableView 中删除行

ios - 使用SDWebImage下载图片,错误-999(或)SDWebImageErrorDomain Code=0 "下载的图片有0像素