Coredata не может выполнить неисправность во время сохранения операции с фона MOC -- ios поле с участием core-data поле с участием nsfetchedresultscontroller поле с участием nsmanagedobjectcontext пол Связанный проблема

CoreData can't fulfill a fault during save operation from background MOC


0
vote

проблема

русский

Я использую два MOCS, один для основного потока и другой MOC на фоновой нити. На главной ните у меня есть UiableView, работающий с FRC (NSFetchedResultScontroller).

Время от времени я запускаю массивную операцию сохранения, которая удаляет все объекты и строит несколько сотен новых объектов ... На данный момент я хочу UiableView в основном потоке, чтобы обновить свои данные (используя FRC, очевидно) Отказ Поэтому основные реестры MOC к NsmanagedObjectContextDidsaveenotification уведомлению (получено от фона MOC) и запускает MergechangesFromContextDidSaveNotification на этой сцене, чтобы обеспечить соответственно обновления UiableView.

Это все работает нормально, пока не стараюсь прокручивать UiableView во время операции сохранения. Когда я пытаюсь прокрутить вид, что «Coredata не может выполнить исключение неисправности». Это результат FRC по-прежнему удерживающим объекты, которые были уже удалены (в то время как операция сохранения все еще работает, до того, как MergechangeSfromContextDidsaveNotification от NsmanageObjectContextDDIDIDSAVENOTIONTIONALTION NOTURY получен на главной MOC). Это какой-то «состояние гонки» между операцией сохранения и обновлением UiableView после получения MergechangesFromcontextDidSaveNotification.

Какой правильный подход к работе с этими двумя МОК и заботясь о FRC, поэтому он сможет справиться с этим сценарием?

Английский оригинал

I am using two MOCs, one for the main thread, and another MOC on a background thread. On the main thread I have a UITableView working with an FRC (NSFetchedResultsController).

Once in a while I run a massive save operation, that deletes all objects and builds a few hundreds of new objects... At this point I want to UITableView in the main thread to refresh its data (using the FRC obviously). Therefore the main MOC registers to the NSManagedObjectContextDidSaveNotification notification (received from the background MOC) and runs mergeChangesFromContextDidSaveNotification at that stage to make sure the UITableView updates accordingly.

This all works fine until I try to scroll the UITableView during the save operation. When I try to scroll the view a "coredata could not fulfill a fault" exception is raised. This is the result of the FRC still holding objects that were already deleted (while the save operation still runs, before mergeChangesFromContextDidSaveNotification from NSManagedObjectContextDidSaveNotification notification is received on main MOC). This is some sort of a "race condition" between the save operation and the update of the UITableView after mergeChangesFromContextDidSaveNotification is received.

What is the right approach to work with those two MOCs and taking care of the FRC so it will be able to cope with this scenario?

</div
           

Список ответов

0
 
vote

в соответствии с яблоки doc :

Неисправность не может быть выполнена проблема: вы видите сообщение об ошибке «Core Данные не могут выполнить неисправность ».

Причина: основные данные соответствующих объектов были удалены от постоянного магазина.

Remedy: Вы должны отменить этот объект.

Эта проблема может возникнуть как минимум в двух ситуациях:

Первый:

Начните с сильной ссылки на управляемый объект. Удалить управляемое Объект через управляемый объект контекста. Сохранить изменения на объекте контекст. На данный момент удаленный объект был превращен в вина. Это не разрушено, потому что это нарушит правила Управление памятью.

Попробуйте получить атрибут или отношения из ранее сохраненная ссылка. Основные данные постараются не повредить объект, но не сможет сделать это, потому что объект был удален из магазин. То есть больше нет объекта с тем же глобальным ID в магазине.

Второе:

Удалить объект из управляемого контекста объекта. Не пробиться все отношения от других объектов к этому объекту. Сохранить изменения.

 

As per apples doc:

Fault cannot be fulfilled Problem: You see the error message, "Core Data could not fulfill a fault".

Cause: The corresponding object's underlying data has been deleted from the persistent store.

Remedy: You should discard this object.

This problem can occur in at least two situations:

First:

Start with a strong reference to a managed object. Delete the managed object via the managed object context. Save changes on the object context. At this point, the deleted object has been turned into a fault. It isn’t destroyed because doing so would violate the rules of memory management.

Try to retrieve an attribute or relationship from the previously retained reference. Core Data will try to fault the faulted managed object but will fail to do so because the object has been deleted from the store. That is, there is no longer an object with the same global ID in the store.

Second:

Delete an object from a managed object context. Fail to break all relationships from other objects to that object. Save changes.

</div
 
 
 
 

Связанный проблема

0  Как трепетать файлы записи в iOS iPhone "Найти на моем телефоне" Папка  ( How to flutter write files to ios iphone find on my phone folder ) 
Моя цель - позволить моему приложению писать и читать файлы, созданные моим приложением. Например, напишите, а затем разрешите пользователю электронной почты ...

1  Попытка запуска двух процессов одновременно в GCD - iOS  ( Attempting to run two processes simultaneously in gcd ios ) 
Я пытаюсь загрузить два набора данных на заднем плане одновременно через GCD в iOS. В настоящее время я построил две отдельные одновременные очереди, в которы...

0  Subview iOS не всегда появляется  ( Ios subview doesnt always appears ) 
У меня есть приложение, с большим количеством видов и подсвидений. В моем делегате приложения я открываю подсыдку каждый раз, когда я получаю уведомление. Я...

1  Не удается изменить размер кадра UiscrollView  ( Cannot resize uiscrollviews frame ) 
У меня есть UiscrollView с его рамой и содержимым с таким же размером. Я хочу изменить высоту кадра ScrollView, когда появится клавиатура, но она не работает....

0  Не удалось отправить сообщение с помощью RTCDatachannel на iOS  ( Failed to send message using rtcdatachannel on ios ) 
Мне удалось разделить видео и аудио между A и B, и я нахожу RTCDatachannelState изменился на KRTCDatachannelStateOpen. <код> - (void)channelDidChangeState:(...

0  Не может запустить TCP-сервер на iOS, сотовой  ( Cannot run tcp server on ios cellular ) 
Я пытаюсь запустить TCP-сервер на iOS из сотовой связи. В целях задачи этого вопроса я написал эту очень упрощенную версию сервера и клиента в C, используя So...

0  Лучшие практики для запроса / ответа на сетевой вызов в приложении iPhone Программирование [Закрыто]  ( Best practises for network call request response in iphone application programmi ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> <Путь d = "M15 6.38A6.48 6.48 0 007.78. 04H-.02A6.49 6.49 0 002.05 ...

1  Есть ли способ редактировать мой текущий игровой центр лидеров после моего приложения iOS?  ( Is there a way to edit my current game center leaderboard once my ios app is liv ) 
Итак, я видел, что я сделал ошибку, когда я настроил мою лидеров в моей игре. Я установил его как «низкий до высокого» вместо «высокого к низкому», и это выгл...

8  Кормление моих собственных видео на Screensaver Apple TV  ( Feeding my own videos to apple tv screensaver ) 
На 4-м GEN Apple TV Вы можете выбрать пользовательский URL-адрес файла JSON для загрузки фильмов заставки, кроме Apple. Для этого вам нужно войти в настройки,...

376  Как я могу преобразовать Swift Array в строку?  ( How do i convert a swift array to a string ) 
Я знаю, как программно сделать это, но я уверен, что есть встроенный ... Каждый язык, который в котором у меня использовал, имеет какое-то текстовое предста...

0  Создать видео слияние с аудио, как Ticktock и Post в SWIFT IOS  ( Create video merge with audio like ticktock and post in swift ios ) 
Neade Некоторые библиотеки или рамки для добытого видеоредактивации и видео. https://github.com/ltebean/Live ...

1  Как бы я выровнял изображение в нижнем правом направлении вида, используя классы размера в XCode?  ( How would i align an image to the bottom right of the view using size classes in ) 
У меня есть изображение, которое я хочу выровнять с правым нижним углом вида, а затем я хочу, чтобы остальное изображение масштабируется, чтобы заполнить дост...

1  PDF Масштабирование внутри UiscrollView  ( Pdf zooming inside uiscrollview ) 
У меня есть файл PDF 2835 пикселей внутри 2835 пикселей UiscrollView. Чтобы отобразить PDF, я использую CATILEDLAYER. Моя проблема в том, что когда я уменьш...

0  Должен ли я использовать Mac для разработки Javafx для iOS  ( Do i have to use a mac to develop javafx for ios ) 
Документация http://docs.gluonhq.com/charm/4.0.1 / # _ iOS говорит, что мне нужно «Mac с MacOS X 10.9 или превосходящим» для разработки для iOS. Но я не пон...

0  Фоновый режим (Fetch) в iOS 8  ( Background mode fetch in ios 8 ) 
Я работаю над приложением iOS, которое использует фоновый режим для публикации обновления на сервере. Приложение Wack, проверяет состояние батареи, выключает ...

Связанный проблема

0  Как трепетать файлы записи в iOS iPhone "Найти на моем телефоне" Папка 
1  Попытка запуска двух процессов одновременно в GCD - iOS 
0  Subview iOS не всегда появляется 
1  Не удается изменить размер кадра UiscrollView 
0  Не удалось отправить сообщение с помощью RTCDatachannel на iOS 
0  Не может запустить TCP-сервер на iOS, сотовой 
0  Лучшие практики для запроса / ответа на сетевой вызов в приложении iPhone Программирование [Закрыто] 
1  Есть ли способ редактировать мой текущий игровой центр лидеров после моего приложения iOS? 
8  Кормление моих собственных видео на Screensaver Apple TV 
376  Как я могу преобразовать Swift Array в строку? 
0  Создать видео слияние с аудио, как Ticktock и Post в SWIFT IOS 
1  Как бы я выровнял изображение в нижнем правом направлении вида, используя классы размера в XCode? 
1  PDF Масштабирование внутри UiscrollView 
0  Должен ли я использовать Mac для разработки Javafx для iOS 
0  Фоновый режим (Fetch) в iOS 8