Я интегрировал рамки coredata в приложении iOS10 (Swift3), которое извлекает данные с сервера и дисплея. Когда приложение запускается в первый раз, у основных данных нет записей. После обмена некоторой информацией с сервером она начинает синхронизацию в фоновом потоке. Я могу видеть, что данные загружаются с сервера через веб-сервис, анализируются и хранятся в основных данных. Но если я уйду и запустим приложение, он покажет все записи.Coredata performFetch не получает новые записи
На мой взгляд, контроллер, я использую «NSFetchedResultsController» для отображения записей в «TableView». Я создаю сгружен контроллер результаты, как показано ниже:
fileprivate lazy var inspirationsResults: NSFetchedResultsController<Inspiration> = {
// Create Fetch Request
let fetchRequest: NSFetchRequest<Inspiration> = Inspiration.fetchRequest()
// Configure Fetch Request
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "timeStamp", ascending: false)]
// Create Fetched Results Controller
let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: CoreDataManager.shared.getContext(), sectionNameKeyPath: nil, cacheName: nil)
// Configure Fetched Results Controller
fetchedResultsController.delegate = self
return fetchedResultsController
}()
В методе viewDidLoad я написал ниже код для извлечения:
do {
try self.inspirationsResults.performFetch()
} catch {
let fetchError = error as NSError
print("\(fetchError), \(fetchError.userInfo)")
}
Я также добавил методы делегата «controllerWillChangeContent, controllerDidChangeContent & didChangeObject» в обрабатывать обновления/модификации.
Я использую persistentContainer сохранить объект:
func addInspirations(_ inspirations:[[String: AnyObject]]) {
persistentContainer.performBackgroundTask({ (bgContext) in
bgContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
for tInspiration in inspirations {
let inspiration = Inspiration(context: bgContext)
inspiration.inspirationID = tInspiration[kInspirationId] as! Int32
inspiration.inspirationName = tInspiration[kInspirationName] as? String
}
if bgContext.hasChanges {
do {
try bgContext.save()
} catch {
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}
}
})
}
я упускаю что-нибудь?
ли ваш фон и основные нити контексты, связанные с 'mergeChangesFromContextDidSaveNotification: '? Или это соединение родитель-ребенок? – bteapot
@bteapot, я обновил свой код с помощью «сохранения» деталей. В том, что я устанавливаю mergePolicy фоновой задачи в NSMergeByPropertyObjectTrumpMergePolicy – Satyam
'mergePolicy' не играет никакой роли в причине вашей проблемы. Я напишу ответ. – bteapot