在我的 XCode 项目中,我的CoreData有两个实体。这些实体称为会话和 SessionDetails 。 Session有一个名为timeCompleted (Type: Date)
的属性,它是事件的时间戳。 Session与SessionDetails处于一对多的关系,但最重要的属性是averageDistance (Type: Float)
。
会话使用timeCompleted进行排序。我想获取已排序的Sessions的averageDistance值并将它们放在一个可用于生成绘图的数组中。 x轴将具有事件的日期,y轴将具有averageDistance值。我现在不关心创建情节,而只是提取将用于它的值。非常感谢任何帮助!
答案 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 到会话。)
现在,您可以从这些对象中提取timeCompleted
和averageDistance
值,
使用键值编码:
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
}
}