3

私は謎の何かに直面しています。NSManagedObject サブクラス「ReinspectionTask」にブール値のプロパティがあります。プロパティは「isOpen」で、タスクを完了する必要があるかどうかを示します。Core Data では、属性タイプは Boolean に設定されています。プロパティは 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

非常に簡単に答えられる質問が 2 つだけあります。

そのような関係では、RestKit でオブジェクト マッピングを設定する際に別の手順を実行する必要がありますか?

いいえ、あなたは正しくやっているようです。

それとも、ReinspectionTask オブジェクトが JSON 構造の奥深くにネストされているという事実と関係があるのでしょうか?

いいえ、これは問題ではありません。上記のコメントで述べたように、私はあなたが何か間違ったことをしていると思います。BOOL プロパティがコンソールに null として表示されることはありません。ターゲットオブジェクトのすべてのプロパティをチェックし、それらがデータモデルとエンティティクラス (存在する場合) で正しいタイプであることを確認します。データモデルでこのプロパティのデフォルト値も確認します

于 2012-06-22T06:55:51.933 に答える