我正面臨一些神祕的事情。我有一個NSManagedObject子類「ReinspectionTask」的布爾屬性。該屬性爲「isOpen」,表示該任務是否仍需完成。在覈心數據中,屬性類型設置爲布爾值。該屬性被聲明爲NSNumber。我拉JSON從服務器,它看起來像這樣:使用RestKit將JSON的布爾屬性映射到NSManagedObject
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"];
這一切工作正常爲最:
[
{
"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映射到我的管理對象模型部分。但是,我在ReinspectionTask上遇到了isOpen BOOL屬性的問題。當我將值記錄到控制檯時,它會返回null。奇怪的是,就我所知,我已經像hasTasks,isScheduled等那樣設置了屬性。這些BOOL屬性工作正常。
我應該提一下,Inspection與ReinspectionTasks的關係是一對多的關係。這種關係是否需要我在RestKit中設置對象映射?
或者它可能與ReinspectionTask對象在JSON結構中嵌套更深的事實有關?
任何想法或建議都是值得歡迎的。非常感謝。
「ReinspectionTasks」(例如'requestText')上定義的其他屬性是否正確映射? – mja
是的。對象上的所有其他屬性都被正確映射。 – geraldWilliam
這非常詳細。當源keypath與目標屬性名稱相同時,可以使用以下方法:[mapping mapAttributes:@「taskID」,@「title」,@「requestText」,nil]等等。 –