정수 속성 "값"을 가진 엔티티 비용이있는 간단한 코어 데이터 저장소가 있습니다. 나는 다음과 같은 SQL 문에 해당 내 가게에서 모든 비용 금액을 요약 할 :코어 데이터와 간단한 합계 계산
SELECT sum(value) FROM costs
어떻게 내가 코코아 터치에서 가장 효율적인 방법으로해야합니까? 핵심 데이터를 사용하여? 또는 모든 비용 엔티티를 가져 와서 합계를 수동으로 수행합니까?
정수 속성 "값"을 가진 엔티티 비용이있는 간단한 코어 데이터 저장소가 있습니다. 나는 다음과 같은 SQL 문에 해당 내 가게에서 모든 비용 금액을 요약 할 :코어 데이터와 간단한 합계 계산
SELECT sum(value) FROM costs
어떻게 내가 코코아 터치에서 가장 효율적인 방법으로해야합니까? 핵심 데이터를 사용하여? 또는 모든 비용 엔티티를 가져 와서 합계를 수동으로 수행합니까?
을 가장 좋은 방법은 fetch for specific values을 사용하고 NSExpressionDescription with a sum:
function을 제공하는 것입니다.
가져 오기를 실행하면 키가 표현식 설명과 일치하고 값이 표현식의 결과 인 사전이 포함 된 요소 배열 하나가 생성됩니다. 이 경우 sum
키를 얻을 수 있습니다.이 키의 값은 표현식이 지정된 속성의 합계입니다.
어레이 및 세트에서 작동하는 특수한 key value coding operators이 있으며 그 중 하나는 @sum
입니다. 당신은 당신이 costs
라는 집합으로 요약 할 모든 개체를 가져, 당신은 각 개체에 대해 요약하려는 속성이 value
경우, 당신은 다음과 같이 @sum 연산자를 사용할 수있는 경우 :
float theSum = [costs valueForKeyPath:@"@sum.value"];
나는 빌드가 다음 코드와 함께 실패 할 수 : NSSet * 비용 = [ self.managedObjectContext fetchObjectsForEntityName : @ "LogItem"withPredicate : nil]; double summedCosts = 비용. 합계. 값; – MrAlek
귀하의 링크 덕분에 알게되었습니다.이 작업은 다음과 같습니다. int summedCosts = [[cost valueKey : @ "@ sum.value"] intValue]; – MrAlek
아, 맞아 ... 미안해. 나는 그 소식을 업데이트 할 것이다. – Caleb
Apple 설명서에 "@sum 연산자는 연산자 오른쪽의 키 경로로 지정된 속성 값의 합계를 반환합니다. 각 숫자는 double로 변환되고 값의 합계가 계산됩니다. 합계가 NSNumber의 인스턴스로 래핑되고 반환됩니다. "
"intValue"대신 "doubleValue"를 사용할 수도 있습니다. 또는 "floatValue"또는 유효한 nsnumber 변환을 사용하여 작업하려는 유형을 얻을 수도 있습니다.
그래서, 다음도 잘 작동 것이다 : '여기에 코드를 입력
double sumOfCostValues = [[costs valueForKeyPath:@"@sum.value"] doubleValue];
또는 :
float sumOfCostValues = [[costs valueForKeyPath:@"@sum.value"] floatValue];
감사! 이것은 더 큰 데이터베이스를 사용하는 가장 좋은 방법입니다. 많은 메모리 할당이 있지만, 작은 데이터베이스에서 자주 가져올 때 효율적이지 않을 수도 있습니다. – MrAlek
실제로는 수십 개 이상의 관리 객체 대신 가져 오기 작업에 대해 몇 개의 객체 만 할당하기 때문에 메모리가 더 효율적입니다. 이렇게하면 데이터를 메모리로 가져 오는 대신 저장소에서 작업을 계속할 수 있습니다. 이것은 전통적인 절차 데이터베이스 작업과 같습니다. – TechZen