я нахожусь на стадии оптимизации моего основного кода данных,NSFetchResultController загружать все сообщения сразу, fetchbatchsize не фиксируя его
Я делаю приложения для обмена сообщениями, и я только хочу, чтобы загрузить 50 сообщений одновременно. Однако, смотря на данные timeprofile, приведенные ниже, fetchrequest загружает все сообщения одновременно. Впоследствии он загружает все сообщения в партиях из 50 без прокрутки. Так что это даже не делает ничего.
Любая помощь была бы принята с благодарностью.
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 данные профилирования:
'для объекта в fetchData { если object.isSender == TRUE { self.JSQmessages.append (JSQCell (SenderId:.?" danzo ", senderDisplayName:" incoming ", date: object.timestamp, tex t: object.text)) } ' – slimboy
Я использую приведенный выше код для добавления сообщений в свой JSQcell, который заполняет все мои таблицы сообщениями. мое приложение зависает всякий раз, когда загружает контроллер из-за большого количества загружаемых сообщений. Вы знаете какие-либо способы оптимизировать это поведение? Большое вам спасибо за помощь, мне это действительно нужно прямо сейчас! – slimboy
Вы сражаетесь с каркасом. Я предполагаю, что JSQCell является подклассом UITableviewCell? Вместо того, чтобы извлекать весь массив и создавать полный массив ячеек таблицы, используйте 'tableView: cellForRowAtIndexPath:', чтобы заполнить ячейки, как они представлены на экране. NSFetchedResultsController специально написан для упрощения. Начать здесь: https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html –