2012-01-10 7 views
1

조깅을하고 코어 데이터를 사용하여 정보를 저장하는 경우 기록되는 응용 프로그램을 만들고 싶습니다. 나는 각 운동을 날짜, 거리 및 시간으로 저장하고 싶다. 또한 실행 한 총 시간과 총 거리를 포함하는 요약을 표시 할 수 있어야합니다.KVO를 사용하여 속성을 업데이트하는 방법

내 disign에서 나는 Workout 개체에서 직접 요약을 표시 할 수 있습니다. 내가 얼마나 많은 시간을 뛰었 는가는 운동 목표의 양에 불과하며, 각 운동에서 거리를 합산하여 총 거리를 구할 수 있습니다. 그러나 두 번째 작업은 너무 많은 비용이 드는 것으로 생각합니다. 데이터를 표시 할 때마다 전체 데이터베이스를 스캔해야하기 때문입니다 (iTunes에서와 동일한 문제로 음악의 총 시간을 표시하고 싶습니다. 장치). 나는 앱이 점심을 먹을 때마다이 정보를 속성에 저장할 수 있지만 느린 시작을 초래할 것이라고 생각합니다. 그 때문에, 나는 오히려 2 coredata 개체가 있다고 생각 요약 및 운동 :

+---------------------+     +---------------------+ 
|Summary    |     |Workout    | 
+---------------------+     +---------------------+ 
|totalDistance  | <--------------->> |date     | 
|totalAmountOfWorkouts|     |distance    | 
+---------------------+     |time     | 
              +---------------------+ 

여기에 질문이 온다. 요약을 어떻게 업데이트해야합니까?

totalDistance 및 totalAmountOfWorkouts를 수동으로 업데이트 할 수 있습니다. 새로운 Workout을 만들 때마다 트리거되는 updateWorkout 메서드를 구현한다고 상상해보십시오. 그러나 나는 Coredata가 이미 관측 기능을 가지고 있고 새로운 Workout 객체가 삽입되었을 때 나에게 KVO를 업데이트 할 수 있다고 알려줄 수 있습니다. 나는 KVO를 사용한 적이 없으며 이것이 KVO를 사용하는 올바른 사례인지 궁금합니다. 그러나 어떻게 그 일을합니까? 실제로 KVO가이 문제를 해결하기위한 최선의 방법입니까 아니면 오히려 Workout에 프로토콜을 구현하고 요약을 대리인으로 지정해야합니까? 저는 KVO 패턴을 디버깅하기가 어렵다는 말을 들으면서 막연하게 기억합니다.

요약하기, 내 질문은 :

Q1 : 나는 totalDistance 직접 DB를 스캔 나갈까요?
Q2 : KVO 또는 대리인 패턴을 사용해야합니까?
Q3 : totalDistance는 어떻게 업데이트됩니까?

답변

1

가장 간단한 API를 사용할 수 있습니다. 가져온 운동의 배열이 있다고 가정 해 보겠습니다. 이, 성능 요구 사항을 충족 거리 값을 캐싱 KVO 또는 다른 메커니즘을 고려하지 않는 경우에만 그 다음 단순히

float distance = [[fetchedObjects valueForKeyPath: @"@sum.distance"] floatValue] 

을한다. 성능이 만족 스럽다면 캐싱보다 실시간 계산이 항상 바람직합니다. 그러나 CoreData가 평생 동안 현실적으로 할 수있는 운동량을 처리하지 못한다고 생각하는 것이 어렵습니다.

+0

에서 예? – Alvaro

+0

CoreData에서 모든 트랙 정보를 가지고 있다면 확실히 시도 할 것입니다! –

+0

대신 @ sum.distance 트릭을 사용하십시오. 각 Workout.distance 값을 반복했습니다. – Alvaro

0

Workout 개체가 많고 batchSize를 사용하여 tableview에 표시하는 경우 SQL 수준에서 계산을 수행하는 NSFetchRequest를 만들어 성능과 메모리를 크게 향상시킬 수 있습니다 슬기로운.

같은 방법으로 아이튠즈 문제 (음악의 시간의 양을) 해결할 다음 블로그 게시물 http://iphonedevelopment.blogspot.co.il/2010/11/nsexpression.html

관련 문제