2017-03-05 1 views
0

속성 (단어) 중 하나에 의해 필터링되는 엔티티 목록을 가져 오려고합니다. fetchedResultsController을 사용하고 있으며 모든 내용이 정상입니다. 목록이로드되고 내 tableView에 표시되어 목록을 정렬 할 수도 있지만 술어을 사용하여 필터링하려고하면 아무 일도 발생하지 않습니다. 내가 뭘 잘못하고 있는지 모르겠다. 나는 사과 웹 사이트와 stackoverflow에서 몇 가지 질문을 시도하고 정말 내가 뭘 잘못하는지 모르겠다.fetchedResultsController가 필터링하지 않습니다 (fetchRequest)

여기에 어떤 제안 정말 감사하겠습니다에 대한 fetchedResultsController

lazy var fetchedResultsController: NSFetchedResultsController<TranslationContainer> = { 

    let fetchRequest = NSFetchRequest<TranslationContainer>() 

    let entity = TranslationContainer.entity() 
    fetchRequest.entity = entity 


    let predicate = NSPredicate(format: "word == %@", "Bed")// doesn't filter 
    fetchRequest.predicate = predicate 


    let sortDescriptor = NSSortDescriptor(key: "word", ascending: true) 
    fetchRequest.sortDescriptors = [sortDescriptor] 

    fetchRequest.fetchBatchSize = 20 

    let fetchedResultsController = NSFetchedResultsController(
     fetchRequest: fetchRequest, 
     managedObjectContext: self.managedObjectContext, 
     sectionNameKeyPath: nil, 
     cacheName: "TranslationContainers") 
    fetchedResultsController.delegate = self 
    return fetchedResultsController 
}() 

내 코드입니다!

답변

0

문제는 실제로 캐시 cacheName: "TranslationContainers"입니다. 필터링 코드를 추가 한 후 업데이트되지 않았습니다. 방금 캐시의 이름을 변경하고 해결했습니다.

2

NSFetchedResultsController는 선택적으로 결과를 캐시하고 위의 코드처럼 NSPredicate를 변경하면 캐시 내용이 동기화되지 않을 수 있습니다. 이 문제를 해결할 수있는 한 가지 방법은 새 조건부를 설정하기 전에 캐시를 삭제하는 것입니다.

NSFetchedResultsController.deleteCache(withName: "TranslationContainers") 
fetchedResultsController.fetchRequest?.predicate = predicate 
관련 문제