2012-11-18 30 views
2

我使用Restkit同時發送了2個請求,並且我收到來自它們兩個的響應,但只有一個請求接收到任何對象。如果我逐一發送它們,那麼我的objectloader會收到所有對象。Restkit中的第二個請求沒有加載的對象

第一個請求:

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]; 
}]; 

我objecloader:

-(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> 

更新:設置我基本URL

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

解決方案

問題是,我同時用於對象管理的共享管理器,所以我結束up做:

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; 

回答

2

加載使用塊語法,

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來代替alloc/init它並提供對象存儲並查看。希望這可以幫助你,

[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); 

     }; 
    }]; 
+0

仍然沒有雪茄。它加載設計師,但不是設計。如果我等待設計完成加載,然後推下設計器請求,那麼兩個加載。我更新了我的帖子,我如何創建我的基礎網址。不知道如果有幫助。 –

+0

看我的編輯。祝你好運;) – Sandeep

+0

這工作...真棒。我已經發布了上面的代碼。非常感謝 :-)。 –

相關問題