2016-01-01 1 views
1

Допустим, у меня есть три сущности. лицо: имя адрес (к-многим-зарплаты) и (к-многим-кредитов)Извлечение суммы ребенка из данных ядра

Заработная плата: доход налог Rel: (однозначном-Person)

Bills количество Rel: (к-одному человек)

Как выполнить выборку, что есть В результате, как это:

John Doe, SUM> доход, SUM> сумма Eva Doe, SUM> доход, SUM> сумма

Использование Swift

+1

Добро пожаловать в SO, пожалуйста, будьте более конкретными, задавая вопрос: что вы пробовали, чего вы ожидаете и т. Д. См. [Как спросить] (http://stackoverflow.com/help/how-to- ask) – Nehal

+0

Спасибо :) Я не знаю, как я могу быть более конкретным. Im, перечисляющий базу данных с атрибутами и отношениями, показывающий результаты, которые я им даю, язык и тегирование со связанными словами :) –

ответ

2

Это, вероятно, наиболее легко сделать, используя значение ключа кодирования «сборщики» (см. here), а не выборки. Для каждого person:

let name = person.name 
let totalIncome = person.valueForKeyPath("[email protected]") 
let totalLoans = person.valueForKeyPath("[email protected]") 

Если производительность является проблемой, вы можете улучшить положение вещей путем внесения запроса выборки (для объектов Person) на «предварительную загрузку» соответствующие Salary и Bills объектов:

fetchRequest.relationshipKeyPathsForPrefetching = ["salary", "loans"] 

В качестве альтернативы, можно получить требуемую информацию в одной выборке, хотя я не рекомендую ее, потому что она требует изменения fetchRequest для возврата массива словарей, а не массива NSManagedObjects. Это затрудняет последующую обработку (например, заполнение таблицы).

// Define NSExpression and NSExpressionDescription for the total income 
let incomeED = NSExpressionDescription() 
incomeED.expression = NSExpression(forKeyPath: "[email protected]") 
incomeED.name = "totalIncome" 
incomeED.expressionResultType = .Integer64AttributeType 
// Define NSExpression and NSExpressionDescription for the total amount 
let amtED = NSExpressionDescription() 
amtED.expression = NSExpression(forKeyPath: "[email protected]") 
amtED.name = "totalLoans" 
amtED.expressionResultType = .Integer64AttributeType 
// specify attributes and expressions to fetch 
fetchRequest.propertiesToFetch = ["name", incomeED, amtED] 
// specify dictionary return type (required to process NSExpressions) 
fetchRequest.resultType = .DictionaryResultType 

Результатом выборки будет массив словарей; каждый словарь будет иметь ключи «имя», «totalIncome» и «totalLoans» (с соответствующими значениями).

+0

Благодарим вас за ответ! Я уже использую это решение сегодня, но я подумал, что было бы лучше сделать это в выборке? Скорость? Использование памяти? Im новый с Swift и Xcode, поэтому просто спрашиваю :) Im используя данные в UITableview. –

+0

@VegarFlo Я думаю, что метод KVC лучший, но я обновил свой ответ с подробностями альтернативного метода для информации. – pbasdf

+0

Большое вам спасибо! :) Я сделаю, как вы говорите, и используйте KVC. Просто подумал, что это даст лучшую производительность, изменив выборку. :) –

Смежные вопросы