3

我正面临着一些神秘的事情。我在 NSManagedObject 子类“ReinspectionTask”上有一个布尔属性。属性为“isOpen”,表示任务是否还需要完成。在 Core Data 中,属性类型设置为布尔值。该属性被声明为 NSNumber。我从服务器中提取 JSON,它看起来像这样:

  [
    {
        "jobID":"73",
        "address":"500 17th Ave. ",
        "city":"Santa Cruz",
        "state":"California",
        "inspections":[
        {
            "inspectionID":"186",
            "inspectionType":"Foundation",
            "mediaKey":"777",
            "hasTasks":true,
            "requestSubmitted":false,
            "reinspectionTasks":[
            {
                 "taskID":"75",
                 "title":"Foundation re-inspection item",
                 "requestText":"Need a photo of <something>",
                 "isOpen":false
            },
            "wasApproved":false,
            "isScheduled":false,
            "hasAvailableTimes":false,
            "availableTimes":[]

       ]
      }
     ]
    }
   ]

然后我使用带有以下代码的 RestKit 将 JSON 映射到我的托管对象模型:

        RKManagedObjectMapping *jobMapping = [RKManagedObjectMapping mappingForEntityWithName:@"Job"];
        RKManagedObjectMapping *inspectionMapping = [RKManagedObjectMapping mappingForEntityWithName:@"Inspection"];
        RKManagedObjectMapping *reinspectionTaskMapping = [RKManagedObjectMapping mappingForEntityWithName:@"ReinspectionTask"];

        jobMapping.primaryKeyAttribute = @"jobID";
        [jobMapping mapKeyPath:@"address" toAttribute:@"address"];
        [jobMapping mapKeyPath:@"city" toAttribute:@"city"];
        [jobMapping mapKeyPath:@"state" toAttribute:@"state"];
        [jobMapping mapKeyPath:@"jobID" toAttribute:@"jobID"];
        [jobMapping mapRelationship:@"inspections" withMapping:inspectionMapping];
        [[RKParserRegistry sharedRegistry] setParserClass:[[RKParserRegistry sharedRegistry] 


                                                           parserClassForMIMEType:RKMIMETypeJSON] 
                                              forMIMEType:@"text/html"];

        inspectionMapping.primaryKeyAttribute = @"inspectionID";
        [inspectionMapping mapKeyPathsToAttributes:
         @"inspectionID", @"inspectionID",
         @"inspectionTime", @"inspectionTime", 
         @"inspectionType", @"inspectionType", 
         @"inspector", @"inspector", 
         @"isScheduled", @"isScheduled", 
         @"mediaKey", @"mediaKey", 
         @"requestSubmitted", @"requestSubmitted", 
         @"hasAvailableTimes", @"hasAvailableTimes", 
         @"availableTimes", @"availableTimes", 
         @"hasTasks", @"hasTasks",
         @"wasApproved", @"wasApproved", nil];
        [inspectionMapping mapRelationship:@"reinspectionTasks" withMapping:reinspectionTaskMapping];
        [inspectionMapping mapRelationship:@"job" withMapping:jobMapping];

        reinspectionTaskMapping.primaryKeyAttribute = @"taskID";
        [reinspectionTaskMapping mapKeyPath:@"taskID" toAttribute:@"taskID"];
        [reinspectionTaskMapping mapKeyPath:@"title" toAttribute:@"title"];
        [reinspectionTaskMapping mapKeyPath:@"requestText" toAttribute:@"requestText"];
        [reinspectionTaskMapping mapKeyPath:@"isOpen" toAttribute:@"isOpen"];
        [reinspectionTaskMapping mapRelationship:@"inspection" withMapping:inspectionMapping];

    [objectManager.mappingProvider setMapping:jobMapping forKeyPath:@"job"];
    [objectManager.mappingProvider setMapping:inspectionMapping forKeyPath:@"inspection"];
    [objectManager.mappingProvider setMapping:reinspectionTaskMapping forKeyPath:@"reinspectionTasks"];

在大多数情况下,这一切都很好。但是,我对 ReinspectionTask 上的 isOpen BOOL 属性有疑问。当我将值记录到控制台时,它返回 null。奇怪的是,据我所知,我已经像 hasTasks、isScheduled 等一样设置了该属性。这些 BOOL 属性工作正常。

我应该提到,Inspection 与 ReinspectionTasks 的关系是一对多的关系。这种关系是否需要我在 RestKit 中设置对象映射时采取其他步骤?

或者它可能与 ReinspectionTask 对象嵌套在 JSON 结构中的事实有关?

任何想法或建议都非常受欢迎。非常感谢。

4

1 回答 1

0

好吧,只有两个问题很容易回答。

这种关系是否需要我在 RestKit 中设置对象映射时采取其他步骤?

不,你似乎做得对。

或者它可能与 ReinspectionTask 对象嵌套在 JSON 结构中的事实有关?

不,这不是问题。正如我在上面的评论中提到的,我怀疑你做错了什么。BOOL 属性永远不应在控制台中显示为 null。我会检查目标对象上的所有属性,并检查它们在数据模型和实体类中的类型是否正确(如果有的话)。我还会在您的数据模型中检查此属性的默认值

于 2012-06-22T06:55:51.933 回答