0

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

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

4

2 回答 2

2

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

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

distValues现在是一个NSNumber包含averageDistance来自每个 Session 对象的对象数组。

更新:正如讨论中证明的那样,从SessionSessionDetails存在一对多关系,是SessionDetailsaverageDistance 的一个属性,您需要所有可能的对,按.(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];

(我假设您sessionSessionDetailsSession之间存在反向关系。)

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

NSArray *xValues = [result valueForKeyPath:@"session.timeCompleted"];
NSArray *yValues = [result valueForKey:@"averageDistance"];
于 2013-07-17T19:27:45.980 回答
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
    }
}
于 2013-07-17T20:57:53.497 回答