0

我有一个网络服务,它按以下顺序返回数据。

    "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"
        }
    ]

},
            },

在我的核心数据数据库中,我进行了实体培训。带有属性:日期,属性:类型和属性:时间。我创建了这个实体的一个子类和一个类别来将它存储到我的数据库中。为了获取网络服务 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)。

有人可以帮忙吗?

亲切的问候。

编辑 一天也有可能进行不止一次的培训。我试过这个,但得到一个错误。

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

                }
4

1 回答 1

1

您似乎使用键值编码来访问genkInfo字典,例如使用键路径“training.type”。在这种情况下,您必须使用,valueForKeyPath:而不是objectForKey:,例如

training.type = [genkInfo valueForKeyPath:TRAINING_TYPE];

编辑:正如我现在所看到的,培训是一个数组。据我所知,您无法通过键值编码访问数组(但我对此不是 100% 确定)。在任何情况下,您都可以使用

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

编辑 2:(这是指您更新的代码。)您需要 2 个循环:trainingen 数组的外循环字典中训练数组的内循环。这应该大致是这样的(可能有错别字或错误,因为我实际上并没有运行这段代码):

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 回答