Могу ли я "вручную" вставить элементы в кэш 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 в автономном режиме, и она работает нормально.