Могу ли я "вручную" вставить элементы в кэш AFIncrementalStore?

Я настроил AFIncrementalStore для захвата объектов из службы JSON по сети и установил его persistentStore в качестве базы данных SQLite. Это все отлично работает.

Теперь я хочу добавить объекты в эту базу данных SQLite вне диапазона (из чего-то другого, кроме веб-службы, на которую указывает AFIncrementalStore), и отразить эти добавления в контроллерах извлеченных результатов, созданных из исходного контекста управляемого объекта,

Я создал контекст управляемого объекта с исходным MOC в качестве его родителя, и я могу добавить к нему объекты, и они будут просмотрены контроллером полученных результатов. Но они не сохраняются в базу данных SQLite AFIncrementalStore. Интересно, что AFIncrementalStore видит эти объекты, пытаясь сохранить их обратно в службу JSON, и жалуется, что правильной конечной точки не существует (я исправил это, переопределив requestForInsertedObject:insertedObject возвращать nil.)

Кто-нибудь знает, как мне этого добиться?

2 ответа

Похоже, вы уже нашли большую часть ответа. AFIncrementalStore проверяет нулевой ответ от requestForInsertedObject: в вашем подклассе AFRESTClient. Если этот метод возвращает nil, AFIS создает постоянный идентификатор для объекта, сохраняет объект в резервном хранилище и не пытается отправить его на сервер снова. Это все в первом разделе executeSaveChangesRequest:withContext:error:,

Ты всегда звонишь save: на родительском ManagedObjectContext? Если нет, то это будет другая причина, по которой он не хранит объект в SQLite. Но тогда он не должен пытаться отправить объект на сервер.

Если вы не хотите помещать объекты на сервер, вы должны переопределить методы

requestForInsertedObject:insertedObject
requestForUpdatedObject:updatedObject
requestForDeletedObject:deletedObject

Затем, когда вы вызываете метод контекста save: ваши объекты должны быть сохранены в базе данных. Я использую подобную логику, когда я делаю операции CRUD в автономном режиме, и она работает нормально.

Другие вопросы по тегам