gpt4 book ai didi

iphone - 如何在核心数据中获得超出请求数据范围的数据点?

转载 作者:行者123 更新时间:2023-11-28 17:48:13 25 4
gpt4 key购买 nike

我正在开发一个 iPhone 应用程序,该应用程序以折线图的形式绘制大型数据库的图形,通过核心数据访问。我正在使用基于图 block 的方法来呈现此图。数据点之间的距离是不规则的。

每个图 block 都使用谓词来检索与该图 block 相关的数据:

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"creationDate > %@ AND creationDate < %@",tileBeginDate, tileEndDate];

[request setPredicate:predicate];

NSMutableArray *result = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];

我在绘制位于不同图 block 中的数据点之间的线时遇到问题,因为绘制这条线需要图 block 范围之外的数据点。

理想情况下,我希望能够在核心数据中获得超出请求范围的一个数据点。有什么办法吗?如果没有,还有其他建议吗?

最佳答案

那些写下问题实际上解决了问题的经典案例之一。在这种情况下,不幸的是在实际发布几分钟后。对不起。

解决方案很简单:我只添加了两个谓词,一个用于检索请求数据范围之前的数据点,一个用于检索请求数据范围之后的数据点,然后将数组合并在一起。

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:managedObjectContext];
[request setEntity:entity];

// Get the the last point (closest to now) first.
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"creationDate" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
[request setFetchLimit:1]; // Keeps the application fast and the memory requirements low.
[sortDescriptors release];
[sortDescriptor release];
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"creationDate > %@",realEndDate];
[request setPredicate:predicate];
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];

// Get the data within the requested range.
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"creationDate" ascending:NO];
sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
[request setFetchLimit:200]; // Keeps the application fast and the memory requirements low.
[sortDescriptors release];
[sortDescriptor release];
predicate = [NSPredicate predicateWithFormat:@"creationDate > %@ AND creationDate < %@",beginDate, realEndDate];
[request setPredicate:predicate];
NSMutableArray *additionalFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
[mutableFetchResults addObjectsFromArray:additionalFetchResults];
[additionalFetchResults release];

// Get the first point last
[request setFetchLimit:1];
predicate = [NSPredicate predicateWithFormat:@"creationDate < %@",beginDate];
[request setPredicate:predicate];
additionalFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
[mutableFetchResults addObjectsFromArray: additionalFetchResults];
[additionalFetchResults release];

关于iphone - 如何在核心数据中获得超出请求数据范围的数据点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3941387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com