CoreData: получить только последние элементы, а не все (iPhone) - PullRequest
2 голосов
/ 13 августа 2010

Добро пожаловать

Я использую базовые данные для хранения данных. Мне нужен такой метод, который возвращает только последние 7 элементов объекта. У меня вопрос, как мне изменить этот код (он выбирает все элементы, но мне нужно только последние 7)

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Trip" inManagedObjectContext:managedObjectContext];
NSFetchRequest *request = [[ NSFetchRequest alloc] init];
[request setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"distance" ascending:NO]; 
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];  
[request setSortDescriptors:sortDescriptors];  
[sortDescriptor release];  
NSError *error;  
tripArray = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];

1 Ответ

4 голосов
/ 13 августа 2010

Определить последний?Базовые данные не имеют внутренней концепции порядка.Если вы имеете в виду под самым дальним расстоянием, основанным на свойстве distance, то вы можете сделать следующее:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Trip" inManagedObjectContext:managedObjectContext];
NSFetchRequest *request = [[ NSFetchRequest alloc] init];
[request setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"distance" ascending:NO]; 
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];  
[request setSortDescriptors:sortDescriptors];  
[request setFetchLimit:7];
[sortDescriptor release];  
NSError *error;  
NSArray *tripArray = [managedObjectContext executeFetchRequest:request error:&error];

Обратите внимание, что добавление -setFetchLimit: приведет к тому, что этот запрос вернет только 7 результатов.Он вернет «первую» 7 в зависимости от вашего вида.Поэтому, если вы хотите ближайший, переверните часть ascending: своего рода.

-mutableCopy

Нет абсолютно никакого смысла в вызове -mutableCopy для возвращаемого NSArrayот -executeFetchRequest: error:.Добавление объектов к этому NSArray не добавит их в Базовые данные, а удаление их из этого NSArray не удалит их из Базовых данных.Поэтому оно не имеет абсолютно никакой ценности и просто расточительно.

Вы помните, где вы это видели?Я уже некоторое время пытаюсь выследить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...