2012-12-23 1 views
0

내 앱에서 사용자에게 일련의 숫자를 물어보고 코어 데이터를 통해 저장 한 다음 내 앱에서 사용자에게이 모든 숫자의 평균을 보여줄 책임이 있습니다. .iOS : 핵심 데이터가 포함 된 GCD를 사용하는 경우

그럼 내가해야 할 일은 사용자가 새 번호를 입력 한 후 새 스레드를 실행하고 NSFetchDescription 인스턴스의 모든 개체를 가져 와서 NSManagedObjectContext에 전화하여 적절한 계산을 수행 할 수 있다는 것입니다. 그런 다음 주 스레드에서 UI를 업데이트하십시오.

코어 데이터의 동시성에 대한 규칙이 NSManagedObjectContext 인스턴스 당 하나의 스레드이므로 알고 싶습니다. 내 앱이 5 개월 만에 폭발하지 않고 방금 설명한 것일 수 있습니까? 나는 그냥 평범한 계산을하기 위해서 전체적으로 새로운 문맥을 인스턴스화하는 것이 필요하다고 생각하지 않습니다 ...

+0

코어 데이터가 마음에 들어요.하지만 모두 저장하는 것이 잘못된 숫자 일 수 있습니다. 특히 모든 것을 가져오고 저장하는 경우를 제외하고는 아무 것도하지 않는 것이 좋습니다. –

답변

0

설명한 내용을 바탕으로 숫자를 CoreData 모델에 입력 할 때 저장하는 것이 가장 좋습니다. NSMutableArray에도 포함 되나요? 누군가가 이전 계산을보고 (그리고 어쩌면 수정해야하는) 경우를 대비하여 향후 검색을 위해이 값을 저장하는 것처럼 보입니다. 이 시나리오에서는 현재 숫자 집합을 입력 한 후 가져 오기를 수행 할 필요가 없습니다. 변경할 수있는 배열을 사용하고 현재 계산의 모든 숫자로 채 웁니다. 숫자가 입력되면 모델과 배열에 저장합니다. 사용자가 평균을 볼 준비가되면 이미 채워진 배열의 숫자에 대해 수학을 수행하십시오. 사용자가 이전 계산을 수정하려면 해당 숫자를 배열로 검색하여 거기에서 작업하십시오.

결론은 여러 스레드와 대규모 데이터 세트에서 모델을 채우기하지 않는 Context의 병합 (전화 번호부의 초기 시딩처럼, 등)와 함께 작동 할 필요가 없습니다 것입니다. Context을 수정하고 해당 컨텍스트에서 save를 호출하는 것은 설명하는 작은 변화에 대해 매우 빠 른 일입니다.

0

데이터 세트의 크기와 관련하여 몇 가지 테스트를 수행하고 싶을 수 있습니다. 아주 작은 경우 sqlite 호출은 매우 빠르므로 기본 대기열에서 처리 할 수 ​​있습니다. 그러나 약간의 시간이 소요된다면 주 스레드에서 꺼내는 것이 현명 할 것입니다.

애플은 다른 스레드에서 MO 컨텍스트를보다 쉽게 ​​사용하기 위해 2011 년에 부모 및 자식 관리 객체 컨텍스트 개념을 도입했습니다. 핵심 데이터에 대한 WWDC 비디오를 확인하고 싶을 수 있습니다.

가져 오기와 함께 NSExpression을 사용하여 min, max, average 등과 같은 고성능 기능을 얻을 수 있습니다. 여기서는 좋은 링크입니다. SO

http://useyourloaf.com/blog/2012/01/19/core-data-queries-using-expressions.html

행운의 사례가있다!

관련 문제