Чтобы получить значения только для одного свойства объекта в Базовых данных iOS - PullRequest
1 голос
/ 31 марта 2012

У меня есть объект с именем «Записи», и у него есть атрибут с именем «сумма» класса NSDecimalNumber.

И, конечно, «Запись» имеет другие атрибуты, такие как «имя», «дата»и т. д.

Теперь мне нужно получить только атрибут amount из всех "Records", чтобы их суммировать,

, чтобы повысить производительность. Мне просто нужно значение«количество», и мне все равно, имя или дату.

Так как мне поступить?

Вот мой код, но я думаю, они не достаточно профессиональны.

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 Ответ

2 голосов
/ 01 апреля 2012

Ин

Откуда вы знаете, что стандартная загрузка не достаточно быстра для ваших нужд? Вы определили выборку, используя инструменты, как проблему? (Я спрашиваю, потому что стандартный способ заставить приложения CD работать быстрее, особенно на iOS, - это извлекать больше данных с помощью более простых предикатов. Затем вы уточняете запрос, используя операции set над элементами в ОЗУ.)

Если вы подумаете об этом, вы поймете, почему. Строки хранятся в непрерывных байтах на диске. Строки часто можно найти в одном и том же блоке диска. Следовательно, одна выборка может потенциально получить много строк. Выборка диска - медленная часть любого запроса к базе данных. На iOS вспышка довольно медленная. Он не предназначен для высокопроизводительных операций с базами данных рассеяния. IOW, устройство iOS не является SSD для своей собственной ОС. Кстати, выборка на флэш-памяти принесет более 128k-256k байт в буферы. Следовательно, получить больше строк легко и сравнительно быстро.

Ваш код выше в основном правильный.

Вам нужно прочитать документацию о неисправностях Core Data. Это фундаментальная концепция в системе. В документации Apple достаточно ясно о природе ошибки. Переполнение стека - это не то место, где нужно запрашивать основную информацию, хорошо описанную в документации любой системы.

Andrew

...