获取CoreData中的值数组

时间:2013-07-17 19:13:55

标签: ios xcode core-data core-plot

在我的 XCode 项目中,我的CoreData有两个实体。这些实体称为会话 SessionDetails 。 Session有一个名为timeCompleted (Type: Date)的属性,它是事件的时间戳。 Session与SessionDetails处于一对多的关系,但最重要的属性是averageDistance (Type: Float)

会话使用timeCompleted进行排序。我想获取已排序的Sessions的averageDistance值并将它们放在一个可用于生成绘图的数组中。 x轴将具有事件的日期,y轴将具有averageDistance值。我现在不关心创建情节,而只是提取将用于它的值。非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

您可以使用键值编码来获取属性值数组。假如说 averageDistance Session 的一个属性,您可以执行以下操作:

NSArray *sessions = ...; // Your sorted array of Session objects
NSArray *distValues = [sessions valueForKey:@"averageDistance"];

distValues现在是一个NSNumber个对象数组,其中包含每个Session对象的averageDistance

更新:正如讨论结果一样, 从会话 SessionDetails averageDistance之间存在多对多的关系 是 SessionDetails 的属性,和  您需要所有可能的(timeCompleted, averageDistance)对,按timeCompleted排序。

因此,你应该取得所有 SessionDetails 对象,而不是获取 Session 对象,并对它们进行排序 根据相关会话的timeCompleted

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SessionDetails"];
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"session.timeCompleted" ascending:YES];
[request setSortDescriptors:@[sort]];
NSArray *result = [context executeFetchRequest:request error:&error];

(我假设你有一个反向关系session SessionDetails 会话。)

现在,您可以从这些对象中提取timeCompletedaverageDistance值, 使用键值编码:

NSArray *xValues = [result valueForKeyPath:@"session.timeCompleted"];
NSArray *yValues = [result valueForKey:@"averageDistance"];

答案 1 :(得分:0)

也许这可以适用于您的情况:

NSArray *sessions = ... // sorted array of Session objects

for (Session *session in sessions)
{
    NSDate *date = session.timeStamp; // you get the date

    NSSet *detailsSet = session.sessionDetails; // session.(details) or whatever the name of the relation is
    for (SessionDetails *details in detailsSet)
    {
        float averageDistance = details.averageDistance; // you get the average distance
        // collect your (date, averageDistance) pair here
    }
}