Сохранить POST-запрос к основным данным, когда нет подключения к Интернету
Я пытаюсь разработать приложение для iOS, которое сохраняет запрос ASIFormDataRequest (т.е. публикацию с изображениями, комментариями и т. Д.), Например, как приложение Twitter сохраняет твит в своих черновиках, а также приложение Path и Instagram.
можно будет просто сохранить экземпляр "ASIFormDataRequest *request" непосредственно в Core Data (к типу, который я не знаю)
или я должен создать разные объекты в зависимости от формы запроса, который я хочу, и сохранить данные запроса? Как например,
[request setPostValue:@"something" forKey:@"method"];
[request addPostValue:object1 forKey:@"key1"];
[request addPostValue:object2 forKey:@"key2"];
[request addPostValue:anImageURLPath forKey:@"key3"];
..и Создать объект для вышеупомянутого запроса с атрибутами почтовых значений запроса?
1 ответ
Вероятно, лучше всего сохранять только те значения, которые вы хотите сохранить. Вы должны создать сущности для хранения ваших ценностей.
Вы можете иметь один объект для любых значений формы с отношением один ко многим к другому объекту, который представляет собой простую пару ключ / значение для имеющихся у вас значений записей.
этот урок я использовал для изучения базовых CoreData. Он проведет вас через создание сущностей и установление отношений между ними
РЕДАКТИРОВАТЬ: В ответ на ваш вопрос в комментариях:
Я бы предположил, что у вас есть модели (классы данных / сущности или как вы их называете) для представления "поста". Я не видел ваш код, и я не уверен, как вы его написали, но так я бы его реализовал.
1) Иметь форму, которая получает данные от пользователя. (и модель, представляющую эту форму)
2) Пользователь нажимает кнопку "Отправить", которая передает эти данные (в качестве модели) в сетевую службу, которая преобразует их в FormDataRequest и пытается отправить.
3) Если происходит сбой в сети (или пользователь просто нажимает "Сохранить черновик"), модель затем отправляется в службу данных, которая сохраняет модель в CoreData. (создает объект CoreData, который должен быть похож, если не совпадает с моделью, копирует значения и сохраняет объект)
как (половина) псевдокод:P
class MyFormViewController{
// Obviously declared in the header file ;)
TextField name;
TextField dob;
...
// View Stuff dealing with displaying the form
...
function getModelForFieldValues() {
Model m;
m.name = name.Text;
m.dob = dob.Text;
return m;
}
function send_buttonPress() {
Model myModel = getModelForFieldValues();
BOOL success = NetworkService.send(myModel); //Attempts to send the data over the network
if(!success) {
DataService.save(myModel); //Saves the model data to CoreData
}
}
function saveDraft_buttonPress() {
Model myModel = getModelForFieldValues();
DataService.save(myModel);
}
}