Как получить еще одно назначение данных за пределами запрашиваемого диапазона данных в основных данных? - PullRequest
1 голос
/ 15 октября 2010

Я работаю над приложением для iPhone, которое строит график большой базы данных, доступ к которой осуществляется через основные данные, в виде линейного графика.Я использую плиточный подход для рендеринга этого графика.Расстояние между точками данных является нерегулярным.

Каждая плитка использует предикат для извлечения данных, релевантных для этой плитки:

NSPredicate * предикат = [NSPredicategnateWithFormat: @ "creationDate>% @ AND creationDate <% @ ", tileBeginDate, tileEndDate]; </p>

[request setPredicate: предикат];

NSMutableArray * result = [[managedObjectContext executeFetchRequest: ошибка запроса: & error] mutableCopy];

У меня проблема при рисовании линий между точками данных, находящимися в разных тайлах, так как для рисования этой линии требуется точка данных вне диапазона тайла.

В идеале, яхотел бы иметь возможность получить одну точку данных за запрошенным диапазоном в основных данных.Есть какой-либо способ сделать это?Если нет, то есть другие предложения?

1 Ответ

0 голосов
/ 15 октября 2010

Один из тех классических случаев, когда запись проблемы фактически решает ее. В этом случае, к сожалению, через несколько минут после публикации. Сожалею.

Решение простое: я просто добавляю еще два предиката, один для получения точки данных до и один для получения точки данных после запрошенного диапазона данных, а затем я объединяю массивы вместе.

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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...