1
내 핵심 데이터 코드를 최적화하는 단계입니다

,NSFetchResultController, fetchbatchsize 내가 메시징 응용 프로그램을 만드는 중이라서 그것을

고정되지 않으며, 나는 한 번에 50 메시지를로드 할. 그러나 아래의 timeprofile 데이터를 보면 fetchrequest는 모든 메시지를 한 번에로드합니다. 그런 다음 스크롤하지 않고 50 개 단위로 모든 메시지를로드합니다. 그래서 아무것도하지 않는 것 같습니다.

도움을 주시면 감사하겠습니다. NSFetchRequest documentation

enter image description here

답변

2

올바른 동작을이다 :

lazy var fetchedResultsControler: NSFetchedResultsController = { 
    let fetchRequest = NSFetchRequest(entityName: "Mesages") 
    fetchRequest.fetchBatchSize = 20 
    fetchRequest.sortDescriptors = [NSSortDescriptor(key: "timestamp", ascending: true)] 
    fetchRequest.predicate = NSPredicate(format: "user.id = %@", self.friend!.id!) 
    let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext 
    let frc = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: moc, sectionNameKeyPath: nil, cacheName: nil) 
    frc.delegate = self 
    return frc 
}() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    do { 
     try fetchedResultsControler.performFetch() 


    } catch let err { 
     print(err) 
    } 

    self.fetchData = fetchedResultsControler.fetchedObjects as! [Mesages]} 

는 CoreData 시간이 데이터를 프로파일 링되어 실행되면 인출

는 전체 요청이 평가되고 일치하는 모든 객체의 ID는 기록되지만 batchSize 객체의 데이터는 영구 저장소에서 한 번에 가져올 수 없습니다. 요구의 실행으로부터 돌려 주어진 배열은 요구에 응해 배치를 투과 적으로 폴트하는 프록시 객체가됩니다. (데이터베이스 측면에서, 이것은 메모리 커서입니다.

대신, 당신은 명시 적으로 제어하려는 경우 대신 fetchLimitfetchBatchSize의 조합을 사용, 그룹화 가져.하지만 그 시점에서 당신은 싸우고있어 NSFetchedResultsController의 기능 당신이 정말로 fetchData 배열을하려고 무엇

+0

'fetchData {object.isSender == 진정한 { self.JSQmessages.append (JSQCell (센더 경우 에서 객체 :.? " danzo ", senderDisplayName :"수신 ", 날짜 : object.timestamp, tex t : object.text)) } ' – slimboy

+0

위의 코드를 사용하여 내 테이블에 모든 메시지를 채우는 JSQcell에 메시지를 추가하고 있습니다. 로드중인 많은 메시지 때문에 컨트롤러가로드 될 때마다 내 응용 프로그램이 멈 춥니 다. 이 동작을 최적화하는 방법에 대해 알고 있습니까? 도움을 주셔서 대단히 감사합니다. 지금 당장 필요합니다. – slimboy

+1

프레임 워크와 싸우고 있습니다. JSQCell이 UITableviewCell의 하위 클래스라고 가정합니다. 전체 배열을 가져오고 tableview 셀의 전체 배열을 만드는 대신'tableView : cellForRowAtIndexPath :'를 사용하여 셀이 화면에 표시되는대로 채 웁니다. NSFetchedResultsController는 특히 쉽게 작성할 수 있도록 작성되었습니다. 여기에서 시작하십시오 : https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html –

관련 문제