Аварийная загрузка данных из CoreData в режиме полета

#ios #objective-c #swift #core-data

#iOS #objective-c #swift #core-data

Вопрос:

Когда я загружаю свое приложение через Интернет, а затем перехожу в режим полета, я могу нормально загружать записи, сохраненные в CoreData. Но если я загружаю свой самолет уже в режиме полета, я получаю сбой в этой строке:

 let results = try moc.fetch(fetchRequest)
 

из этой функции:

    func loadImages(_ fetched:@escaping (_ images:[FullRes]?) -> Void) {

    saveQueue.async() {
        let context = self.getContext()

        guard let moc = context else {
            return
        }


        let fetchRequest: NSFetchRequest<NSFetchRequestResult> = FullRes.fetchRequest()
        //let request: NSFetchRequest<NSFetchRequestResult> = FullRes.fetchRequest()
        //let fetchRequest = NSFetchRequest(entityName: "FullRes")//NSFetchRequest(entityName: "FullRes")


        do {

            let results = try moc.fetch(fetchRequest)

            let imageData = results as? [FullRes]
            DispatchQueue.main.async() {
                fetched(imageData)

            }
        } catch let error as NSError {
            print("Could not fetch (error), (error.userInfo)")
            return
        }
    }
}
 

И это дает мне это сообщение:

Завершение работы приложения из-за неперехваченного исключения ‘NSInvalidArgumentException’, причина: ‘executeFetchRequest:ошибка: недопустимый запрос NSFetchRequest.’

Не уверен, почему это происходит…Есть идеи?

Комментарии:

1. Если ошибка связана с тем, что запрос недействителен, вам необходимо указать источник для FullRes.fetchRequest() .

Ответ №1:

Я исправил это, поставив это

 if Reachability.isConnectedToNetwork() == true {
    }
 

вокруг моей функции loadPosts() в viewDidLoad, поскольку она вызывала методы из AppDelegate!

Это заняло у меня несколько часов 😉

Комментарии:

1. Это может остановить ваш сбой, но не отвечает на ваш вопрос. Из того, что вы здесь сказали, нет никаких причин, по которым сетевое подключение повлияет на вашу способность использовать Core Data. Вы скрыли проблему, но не исправили ее.

2. @TomHarrington Спасибо, что проявили интерес к этому. В основном проблема заключалась в том, что в AppDelegate у меня был установлен setNetworkActivityIndicator и другая функция для отображения пользовательского пользовательского интерфейса в главном представлении (для ошибок или подключения к Интернету и т. Д.). В главном представлении, где у меня есть настройка CoreData в функции loadPosts, я обращался к ним и использовал эти две функции из AppDelegate. когда я удалил их (удалил их из AppDelegate и удалил код для доступа к ним в главном представлении), CoreData снова заработал…

3. Теперь да, я в основном нашел временное решение для исправления этого, но не уверен, что еще я мог бы сделать … Пожалуйста, дайте мне знать ваши мысли.