我有一个网络服务,按以下顺序返回数据。
"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"
}
]
},
},
在我的核心数据库中,我有一个实体培训。具有属性:日期,属性:类型和属性:时间。我创建了这个实体的子类和一个类别来将它存储到我的数据库中。为获取webservice 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;
}
但是它一直为上面的NSLog提供(null)。
有人可以帮忙吗?
亲切的问候。
修改 的 每天可以进行多次训练也是可行的。我尝试了这个,但收到了错误。
int trainingIndex = -1;
for (NSDictionary *genkInfo in trainingen ) {
trainingIndex++;
[Training trainingWithGenkInfo:genkInfo inManagedObjectContext:document.managedObjectContext withIndex:trainingIndex];
}
答案 0 :(得分:1)
您似乎使用Key-Value Coding来访问genkInfo
词典,例如使用密钥路径“training.type”。在这种情况下,您必须使用valueForKeyPath:
代替objectForKey:
,例如
training.type = [genkInfo valueForKeyPath:TRAINING_TYPE];
编辑:正如我现在看到的, training 是一个数组。据我所知,你不能通过键值编码访问数组(但我不是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];
}
}
这可能不是最佳代码,但您应该能够找到这样的解决方案。
备注:如果某些内容无效并且您收到错误消息,那么您应该在问题中添加确切的错误消息,并在代码中找到消息发生的位置。这使其他人更容易帮助您。