通过一对多关系获取Core Data中的对象

san*_*ldo 1 core-data ios

我有这样One-to-Many relationshipCore Data:

在此输入图像描述

每个都SBQChrono可以有很多SBQLaps.

在我的模型中,我有班级SBQLap:

@interface CILap : NSObject

@property (strong, nonatomic) NSDate * lapDate;

@end
Run Code Online (Sandbox Code Playgroud)

和班级SBQChrono:

@interface CIChrono : NSObject

@property (strong, nonatomic) NSDate * startDate;
@property (strong, nonatomic) NSDate * stopDate;
@property (strong, nonatomic) NSOrderedSet *laps;

@end
Run Code Online (Sandbox Code Playgroud)

我做了所有的SBQChrono entities事情:

NSFetchRequest *request=[[NSFetchRequest alloc] initWithEntityName:kChronoEntityName];

NSError *error;
NSArray *objects = [appContext.managedObjectContext executeFetchRequest:request error:&error];
Run Code Online (Sandbox Code Playgroud)

如何获得SBQLap每个SBQChrono我发现的指定实体?我读了很多帖子,但无法得到解决方案.

更新:

在尝试施放之后NSManagedObject,我意识到圈数以零值返回.

这样做:

for(NSManagedObject*对象中的oneObject){

    CIChrono *chrono=(CIChrono *)oneObject;

    NSLog(@"startDate %@", chrono.startDate);
    NSLog(@"stopDate %@", chrono.stopDate);
    NSLog(@"laps %@",chrono.laps);
Run Code Online (Sandbox Code Playgroud)

我收到消息:

2014-01-28 14:39:48.379 Chrono[2341:70b] startDate 2014-01-28 12:27:53 +0000
2014-01-28 14:39:48.380 Chrono[2341:70b] stopDate 2014-01-28 12:27:54 +0000
2014-01-28 14:39:48.380 Chrono[2341:70b] -[NSManagedObject laps]: unrecognized selector sent to instance 0x8b959b0
2014-01-28 14:39:48.383 Chrono[2341:70b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSManagedObject laps]: unrecognized selector sent to instance 0x8b959b0'
Run Code Online (Sandbox Code Playgroud)

谢谢

Mar*_*rra 6

这一个有很多有趣的答案.

答案非常简单,不需要子类化NSManagedObject来访问关系中的对象.您只需使用KVC(键值编码)来访问这些对象.关系和属性也是如此.

如果你想使用合成方法,你可以通过子类化来暗示,但这不是必需的.

以下是您在问题中发布的示例的扩展:

for (NSManagedObject *oneObject in objects) {

    CIChrono *chrono=(CIChrono *)oneObject;

    NSLog(@"startDate %@", [chrono valueForKey:@"startDate");
    NSLog(@"stopDate %@", [chrono valueForKey:@"stopDate"]);
    NSLog(@"laps %@", [chrono valueForKey:@"laps"]);

    NSSet *laps = [chrono valueForKey:@"laps"];

    for (NSManagedObject *lap in laps) {
        NSLog(@"Lap entity: %@", lap);
    }
}
Run Code Online (Sandbox Code Playgroud)

记下-valueForKey:电话.这些是NSManagedObject实例(和所有其他Objective-C对象)响应的键值编码.我建议阅读有关KVC和KVO的文档.