2015-01-03 3 views
0

코어 데이터에 객체로 저장하는 (~ 250k) 단어 (배열 안에 있음)를 인쇄하는 데 문제가 있습니다. 그것은 영원히 걸립니다. 이것은 내가 내 모든 단어 배열을 만든 후 내가, 빠른 열거를 사용하고있어 무엇 :마법 기록/핵심 데이터 : 성능/시간 문제없이 많은 개체 저장 (~ 250K)?

[self learnWord:word andSave:YES]; 

이것은 대상으로 각 단어를 저장하지만, (~ 30 분) 영원히합니다.

[self learnWord:word andSave:NO]; 

//Save our suggestions 
[[NSManagedObjectContext MR_contextForCurrentThread] MR_saveToPersistentStoreAndWait]; 

이것이하는 일은 "단어"의 값을 가진 개체를하지 않는 경우는 검사입니다 :

그래서 대신 난 그냥 객체를 생성하고 빠른 열거 루프 후 한 번 저장이 완료 시도 우리의 말과 일치하고 그런 경우에 엔티티를 만듭니다.

wordSuggestion.word = word; 
wordSuggestion.popularity = @1; 

내가 각각의 단어에 저장을 비활성화하고 빠른 열거 루프가 완료되면 대신 내가 수동으로 저장되는 일을 시도했습니다 (이 작동하지 않습니다) : 그럼 다음 값을 할당합니다.

개체를 실제로 빠르게 만들고 30 분이 지나지 않아도 저장하는 쉬운 방법이 있습니까?

+0

괜찮은 동시 작업 횟수가있는'NSOperationQueue'를 통해 백그라운드 스레드에서 저장을 시도 했습니까? –

+0

NSOperationQueue에 접근하는 방법, @ LoisTur에 응답 해 주셔서 감사합니다. 나는 확실히 그것을 지금 보게 될 것이다. – KingPolygon

+0

오, 음, 나는 조금 떨어져서 킨 폴리곤. 나는 사과의 [Core Data and Concurrency] (http://bit.ly/coreDconcurrent) 가이드를 북마크했지만, 가이드 상단에 _이 문서가 작성된 이래로 핵심 데이터와의 동시성에 대한 모범 사례가 크게 변경되었습니다. 이 장은 현재 권장 사항 "_을 나타내지는 않습니다. 그래서 당분간 당황한 후, 나는 이것을 발견했다 : [Core Data Tuts +] (http://code.tutsplus.com/categories/core-data). 그들은 정말 좋은 iOS8 특정 코어 데이터 정보를 가지고있는 것처럼 보입니다. 직접 확인해야 할 것입니다. –

답변

1

모바일 장치의 핵심 데이터에 250k 개의 항목을로드하는 것이 최선의 방법이 아니므로 그 이유를 설명하고 대안을 고려해야합니다.

이 방법을 사용하면 데이터베이스를 미리 만들어 릴리스에서 앱에 포함시키는 것이 가장 좋습니다. 그런 다음 필요할 경우 런타임에 델타 업데이트 만 적용하십시오. 이 방법으로 로딩 시간은 중요하지 않습니다.

로딩 시간이 30 분이며, 추가 한 단어마다 가져 오기 요청을하고있는 것으로 추정됩니다 (비효율적입니다). 대신 단어를 그룹으로 배치해야합니다 (예 : 100이지만 좋은 가치를 찾기 위해 테스트해야 함). 각 배치에 대해 하나의 패치 요청을 실행 한 다음 필요한 델타를 만들고 저장하십시오.

일단 이것을 사용하면 배경 스레드와 관련 컨텍스트를 쉽게 만들 수 있습니다. 그러면 해당 컨텍스트를 저장할 때 최대 상위 영구 저장소에 저장할 수 있습니다. 이 방법을 사용할 때 원본 단어 목록에 중복 된 단어가 포함되지 않도록해야합니다.