Чтобы получить значения только для одного свойства объекта в Базовых данных iOS
У меня есть объект с именем "Записи", и у него есть атрибут с именем "сумма" класса NSDecimalNumber.
И, конечно же, "Запись" имеет другие атрибуты, такие как "имя", "дата" и так далее.
Теперь мне нужно получить только атрибут количества всех "записей", чтобы суммировать их,
чтобы получить лучшую производительность, мне просто нужно значение "количество", и мне все равно, имя или дату.
Так как мне быть?
Вот мой код, но я думаю, что они не достаточно профессиональны.
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"TransferRecord"];
request.includesSubentities = NO;
[request setPropertiesToFetch:[NSArray arrayWithObject:@"amount"]];
// [request setReturnsObjectsAsFaults:NO]; // I don't know whether I shoud use this
[request setResultType:NSDictionaryResultType];
NSError *error = nil;
NSArray *temp = [self.fetchedResultsController.managedObjectContext executeFetchRequest:request error:&error];
if (temp) {
// NSDecimalNumber *allTrans = [NSDecimalNumber zero];
// for (NSDecimalNumber *one in [temp valueForKey:<#(NSString *)#>)
NSLog(@"%@",[temp description]);
И мне не ясно, что означают "недостатки".
1 ответ
Eno,
Откуда вы знаете, что стандартная загрузка не достаточно быстра для ваших нужд? Вы определили выборку, используя инструменты, как проблему? (Я спрашиваю, потому что стандартный способ заставить приложения CD работать быстрее, особенно на iOS, - это извлекать больше данных, используя более простые предикаты. Затем вы уточняете запрос, используя операции set над элементами в ОЗУ.)
Если вы подумаете об этом, вы поймете, почему. Строки хранятся в непрерывных байтах на диске. Строки часто можно найти в одном и том же блоке диска. Следовательно, одна выборка может потенциально получить много строк. Выборка диска - медленная часть любого запроса к базе данных. На iOS вспышка довольно медленная. Он не предназначен для высокопроизводительных операций с базами данных рассеяния. IOW, устройство iOS не является SSD для своей собственной ОС. Кстати, выборка на флэш-памяти принесет более 128k-256k байт в буферы. Следовательно, получить больше строк легко и сравнительно быстро.
Ваш код выше в основном правильно.
Вам нужно прочитать документацию о неисправностях Core Data. Это фундаментальная концепция в системе. В документации Apple достаточно ясно о природе ошибки. Переполнение стека - это не то место, где нужно запрашивать основную информацию, которая хорошо описана в документации любой системы.
Эндрю