2016-09-10 1 views
1

약 10.000 개의 엔티티와 50 NSString 요소의 동적 NSArray에 대한 데이터베이스가 있습니다. 해당 요소가 각각 데이터베이스에 존재하는지 확인하고 존재하는 배열을 새로 작성하고 싶습니다. 전체 엔티티를 반환 할 필요가 없습니다. NSString 제목 (NSString 배열과 동일)핵심 데이터 fetchRequest의 매개 변수로 NSArray

NSPredicate는 entity.title과 EXACT 일치 NSString 요소를 비교해야합니다.


그것을 할 수있는 효율적인 방법 최고의 프로세서/메모리 무엇입니까?

답변

2

결과를 얻기 위해 술어에서 'in'연산을 사용해야한다고 생각합니다. 따라서 비교할 수있는 10,000 개의 레코드를 모두 가져 오는 대신 데이터베이스를 활용하여 비교를 수행 할 수 있습니다.

// Assuming that arrayName is your existing array of values to match, that 
// EntityName is the object in CoreData that you’re looking at, and context 
// is your moc 

var newArray: [String] = [] 

let fetchRequest = NSFetchRequest<EntityName>(entityName: "EntityName") 
fetchRequest.predicate = NSPredicate(format: "title in %@", arrayName) 

do { 
    result = try context.fetch(fetchRequest) 
    for element in result { 
     newArray.append(element.title) 
    } 
} catch { 
    … manage any errors … 
} 

주 - 나는 스위프트 3.0 호환 코드를 대상으로하고있어 - 신속가 필요하시면이었다 확실하지 :이 방법을 가지고가는 경우에, 당신의 코드는 다음과 같을 수 있습니다.

+0

감사합니다. 정확하게, 나는 전체 테이블을 당기고 싶지 않다. 핵심 데이터는 모든 작업을 수행해야합니다. 이 솔루션이 최적입니까? 더 이상 아이디어가 없다면 답으로 확인해 보겠습니다. – elektricni

+0

title 속성에 색인을 아직 추가하지 않은 경우 색인을 추가 할 가치가 있습니다. – pbasdf

+0

pbasdf가 제안한 색인은 응용 프로그램의 제목 사용에 따라 유용 할 수 있지만, 그렇지 않은 경우이 방법의 효율성을 높이는데 어떤 것도 알지 못합니다. –