0

次の順序でデータを返すWebサービスがあります。

    "club": {
       -"trainingen": [

            {
                "date": "12/10/2012",
                "training": [
                    {
                        "type": "Wedstrijd B-kern Bergen-KRC Genk",
                        "time": "19:30"
                    }
                ]
            },
            {
               {

    "date": "16/10/2012",
    "training": [
        {
            "type": "Training",
            "time": "10:00"
        },
        {
            "type": "Training",
            "time": "14:30"
        }
    ]

},
            },

私のコアデータデータベースには、エンティティトレーニングがあります。属性:日付、属性:タイプ、属性:時間。このエンティティのサブクラスと、データベースに保存するカテゴリを作成しました。WebサービスのURLを取得するために、私は次のことを行っています。

+ (NSArray *)getTrainingen
{
    NSString *request = [NSString stringWithFormat:@"http://www.krcgenk.be/mobile/json/request/club/type/ipad"];
    return [[self executeGenkFetch:request] valueForKeyPath:@"club.trainingen"];
}

私は自分の価値観をこのように一番上に定義しました。

#define TRAINING_TYPE @"training.type"
#define TRAINING_DATE @"date"
#define TRAINING_TIME @"training.time"

私のカテゴリーでは、次のことを行っています。

+ (Training *)trainingWithGenkInfo:(NSDictionary *)genkInfo
            inManagedObjectContext:(NSManagedObjectContext *)context
                         withIndex: (int)index;
{
    Training *training = nil;

    training = [NSEntityDescription insertNewObjectForEntityForName:@"Training"
                                          inManagedObjectContext:context];

    training.type          = [[[genkInfo objectForKey:@"training"] objectAtIndex:index] objectForKey:@"type"];
    training.time          = [[[genkInfo objectForKey:@"training"] objectAtIndex:index] objectForKey:@"time"];
    training.date          = [genkInfo objectForKey:TRAINING_DATE];

    NSLog(@"type: %@", training.type);
    NSLog(@"time: %@", training.time);

    return training;
}

しかし、それは上記のNSLogsに(null)を与え続けます。

誰か助けてもらえますか?

敬具。

編集 1日に複数のトレーニングが行われる可能性もあります。これを試しましたが、エラーが発生しました。

 int trainingIndex = -1;
     for (NSDictionary *genkInfo in trainingen ) {
          trainingIndex++;         
 [Training trainingWithGenkInfo:genkInfo inManagedObjectContext:document.managedObjectContext withIndex:trainingIndex];

                }
4

1 に答える 1

1

キーパス「training.type」などを使用して、キー値コーディングgenkInfoを使用して辞書にアクセスしているようです。その場合、の代わりにを使用する必要があります。valueForKeyPath:objectForKey:

training.type = [genkInfo valueForKeyPath:TRAINING_TYPE];

編集:私が今見ているように、トレーニングは配列です。私の知る限り、Key-Valueコーディングを介して配列にアクセスすることはできません(ただし、100%確信はありません)。いずれにせよ、あなたは値にアクセスすることができます

training.type = [[[genkInfo objectForKey:@"training"] objectAtIndex:0] objectForKey:@"type"]

編集2:(これは更新されたコードを参照します。)2つのループが必要です。1つはtrainingen配列の外側のループで、もう1つ辞書のtraining配列の内側のループです。これはおおよそ次のようになります(実際にこのコードを実行しなかったため、タイプミスやエラーが発生する可能性があります)。

for (NSDictionary *genkInfo in trainingen) {
    NSArray *training = [genkInfo objectForKey:@"training"];
    for (int i = 0; i < training.count; i++) {
        [Training trainingWithGenkInfo:genkInfo
                inManagedObjectContext:document.managedObjectContext
                             withIndex:trainingIndex];
    }
}

これは最適なコードではないかもしれませんが、このような解決策を見つけることができるはずです。

備考:何かが機能せず、エラーメッセージが表示される場合は、質問に正確なエラーメッセージを追加し、コード内でメッセージが発生するポイントを特定する必要があります。これにより、他の人があなたを助けやすくなります。

于 2012-10-12T10:58:50.587 に答える