2014-05-13 15 views
1

在我的主控制器,该RESTKIT工作正常:RestKit使用缓存的或旧的响应描述

我的代码和响应描述是这样的:但是

// register mappings with the provider using a response descriptor 
RKResponseDescriptor *responseDescriptor = 
[RKResponseDescriptor responseDescriptorWithMapping:workOrderMapping 
              method:RKRequestMethodGET 
             pathPattern:@"/api/workorder/GetWorkOrderListSimple" 
              keyPath:nil 
             statusCodes:nil]; 

[objectManager addResponseDescriptor:responseDescriptor]; 


[[RKObjectManager sharedManager] getObjectsAtPath:@"/api/workorder/GetWorkOrderListSimple" 
             parameters:nil 
              success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { 
               NSLog(@"It Worked"); 
               _workOrders = mappingResult.array; 
               [self.tableView reloadData]; 
              } 
              failure:^(RKObjectRequestOperation *operation, NSError *error) { 
               NSLog(@"error': %@", error); 
              }]; 

所以这第一次调用工作正常,在我的第二个控制器上,它似乎在某种程度上重用了这个旧的响应描述符,我创建了一个新的响应描述符,但在错误消息中它仍然引用了GetWorkOrderListSimple,当我明确告诉它使用GetWorkOrderDetail时。

RKResponseDescriptor *responseDescriptor = 
    [RKResponseDescriptor responseDescriptorWithMapping:workOrderBigMapping 
               method:RKRequestMethodGET 
              pathPattern:@"/api/workorder/GetWorkOrderDetail" 
               keyPath:nil 
              statusCodes:nil]; 

但是出于某种原因,这是我的错误信息,任何人都可以点我在调试正确的方向?谢谢!!! http://xxxxxxx.ws pathPattern =/API /工作单/ GetWorkOrderListSimple statusCodes =(空)>失败:

A 200响应是从URL 'http://xxxxxxx.ws/api/workorder/GetWorkOrderDetail?workOrderId=116194',这未能匹配所有(1)响应描述符加载匹配:响应路径'/ api/workorder/GetWorkOrderDetail?workOrderId = 116194'与路径模式'/ api/workorder/GetWorkOrderListSimple'不匹配。

我具有相同的“装载”或“设置”代码中的每个视图控制器的viewDidLoad中,有两个视图控制器

我打电话configureRestKit在每viewDidLoad中,我应该不?这应该在应用程序委托或其他地方?

我想既然我在每个视图控制器配置套件viewDidLoad中这将是每一次

- (void)configureRestKit 
{ 
    // initialize AFNetworking HTTPClient 
    NSURL *baseURL = [NSURL URLWithString:@"http://xxxxxxxx.ws"]; 
    AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:baseURL]; 

    // initialize RestKit 
    RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:client]; 

    // setup object mappings 
    RKObjectMapping *workOrderBigMapping = [RKObjectMapping mappingForClass:[WorkOrderBig class]]; 
    [workOrderBigMapping addAttributeMappingsFromArray:@[@"WorkOrderId", @"Job", @"Address", @"Supervisor", @"PO", @"Priority", @"Status", @"ReceivedDate"]]; 

    RKObjectMapping *workOrderDetailMapping = [RKObjectMapping mappingForClass:[WorkOrderDetail class]]; 
    [workOrderDetailMapping addAttributeMappingsFromArray:@[@"WorkOrderDetailId", @"WorkOrderId", @"WorkOrderProblemId", @"DetailDescription", @"ProductId", @"Qty", @"PONumber", @"Code", @"ProductDescription", @"UOM", @"Price", @"OriginalPrice", @"PctMarkup", @"LineItem", @"OriginalTotal", @"TotalPrice"]]; 

    RKObjectMapping *workOrderProblemMapping = [RKObjectMapping mappingForClass:[WorkOrderProblem class]]; 
    [workOrderProblemMapping addAttributeMappingsFromArray:@[@"WorkOrderId", @"WorkOrderProblemId", @"Description", @"SpanishDescription", @"Action", @"LineItem"]]; 

    //Define Relationships 
    [workOrderBigMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"Details" 
                        toKeyPath:@"Details" 
                       withMapping:workOrderBigMapping]]; 

    [workOrderBigMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"Problems" 
                        toKeyPath:@"Problems" 
                        withMapping:workOrderProblemMapping]]; 


    // register mappings with the provider using a response descriptor 
    RKResponseDescriptor *responseDescriptor = 
    [RKResponseDescriptor responseDescriptorWithMapping:workOrderBigMapping 
               method:RKRequestMethodGET 
              pathPattern:@"/api/workorder/GetWorkOrderDetail" 
               keyPath:@"/api/workorder/GetWorkOrderDetail" 
              statusCodes:nil]; 

    [objectManager addResponseDescriptor:responseDescriptor]; 


- (void)loadWorkOrders 
{ 
    NSString *WorkOrderId = [NSString stringWithFormat:@"%i", _workOrderId]; 


    NSMutableDictionary *params =[[NSMutableDictionary alloc] init]; 
    [params setValue:WorkOrderId forKey:@"workOrderId"]; 

    [[RKObjectManager sharedManager] getObjectsAtPath:@"/api/workorder/GetWorkOrderDetail" 
              parameters:params 
               success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { 
                NSLog(@"It Worked"); 
                _workOrders = mappingResult.array; 

                //paint screen 
                WorkOrderBig *mainWorkOrder = [_workOrders objectAtIndex:0]; 
                self.lblWorkOrderId.text = mainWorkOrder.WorkOrderId; 

               } 
               failure:^(RKObjectRequestOperation *operation, NSError *error) { 
                NSLog(@"What do you mean by 'there is no coffee?': %@", error); 
               }]; 
} 
+0

显示你如何使用'objectManager'和'[RKObjectManager sharedManager]' - 你有多个管理器吗? – Wain

+0

我有两个独立的视图控制器,我以为我每次都在安装一个新的视图控制器。 –

+0

我添加了更多的代码,感谢您的时间并查看了我发布的内容 –

回答

0

我打电话configureRestKit每viewDidLoad中一个新鲜的,我不应该?

根据您的配置,是的,你应该

如果这是在应用程序委托或别的地方?

没有,应用程序委托是应用级事件的管理,而不是数据配置

所以,你的配置几乎是罚款,问题是您的使用情况:[RKObjectManager sharedManager]。当您致电sharedManager时,您将始终返回第一个创建的对象管理器,而不是“本地”创建的对象管理器。

您应该在每个视图控制器上使用@property来存储他们创建的objectManager,然后使用self.objectManager而不是[RKObjectManager sharedManager]

+0

谢谢!我会从最高的屋顶尖叫你的名字!我会把你的未出生的孩子卖给你,我会把答案投票出去,但我没有15个代表......:D –