2012-06-13 39 views
3

我正面臨一些神祕的事情。我有一個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結構中嵌套更深的事實有關?

任何想法或建議都是值得歡迎的。非常感謝。

+0

「ReinspectionTasks」(例如'requestText')上定義的其他屬性是否正確映射? – mja

+0

是的。對象上的所有其他屬性都被正確映射。 – geraldWilliam

+0

這非常詳細。當源keypath與目標屬性名稱相同時,可以使用以下方法:[mapping mapAttributes:@「taskID」,@「title」,@「requestText」,nil]等等。 –

回答

0

那麼只有兩個問題很容易回答。

這種關係是否需要我在RestKit中設置對象映射?

不,你似乎做得很對。

或者它可能是與事實,ReinspectionTask對象 在JSON結構嵌套更深呢?

不,這不是問題。正如我在上面的評論中提到的,我懷疑你做錯了什麼。 BOOL屬性不應該以空值出現在控制檯中。我會檢查目標objet上的所有屬性,並檢查它們是否是數據模型和實體類中的正確類型(如果有的話)。我還會檢查數據模型中此屬性的默認值。