我正面临着一些神秘的事情。我在 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 结构中的事实有关?
任何想法或建议都非常受欢迎。非常感谢。