2010-07-17 3 views
4

Я не нашел ответа на этот вопрос в любом месте, но это кажется типичной проблемой:iPhone: Загрузка очереди при запуске

Я хотел бы отправить некоторые POST-запросы (с ASIHTTPRequest, что я уже делать), но если что-то пойдет не так, пользователь может решить «Попробовать позже», значит, задача должна быть поставлена ​​в очередь, и эту очередь следует читать в следующий раз, когда приложение запускается. Итак, это мой вопрос: как «сохранить» очередь, чтобы приложение могло читать ее при следующем запуске? Возможно ли «прочитать» очередь и попробовать отправить этот POST-запрос еще раз, скажем, через 10 минут, даже если приложение не работает?

Какую документацию я должен прочитать, чтобы иметь возможность сделать это?

Я был бы очень рад услышать любые ответы. Заранее спасибо.

PS: Еще одна идея У меня есть: поскольку мне просто нужно загружать фотографии, у меня может быть папка со всеми фотографиями, которые все еще нужно загружать, и когда приложение запустится, приложение просматривает эту папку и пытается отправьте все фотографии в этой папке. Имеет ли это смысл?

ответ

2

Мой подход к этой проблеме было бы так:

  1. Всякий раз, когда вы не посылать детали - написать содержимое массива в файл, используя '[NSArray WriteToFile:] Вы можете использовать сериализацию, если массив содержит любые данные, которые являются настраиваемыми (если ваш массив содержит стандартные объекты какао (NSString, NSData и т. д.), которые они уже реализовали с сериализацией)
  2. Когда приложение запускается; загрузите содержимое из файла непосредственно в объект массива ('[NSArray arrayWithContentsOfFile:]')
  3. затем создайте http-запрос и попробуйте отправить. В приложении данные (в вашем массиве case) хранятся/сериализованы без запроса, вам нужно восстановить HTTP-запрос, если вы хотите попробовать еще раз. (Не пытайтесь выполнить сериализацию ASIHTTPRequest, вы его реконструируете)
+0

Попробуй попробовать прямо сейчас.Благодаря! – jcdmb

+0

Да, это сработало отлично. Спасибо вам и Кайлу! – jcdmb

2

Я предполагаю, что вы уже посмотрели NSOperationQueue и NSOperation. AFAIK нет встроенной поддержки для сериализации NSOperation, но вы можете очень легко написать свой собственный механизм сериализации для подкласса NSOperation, который вы используете для размещения данных и записываете NSOperationQueueoperations на диск, если что-то пойдет не так.

Не зная слишком много деталей, трудно дать точный ответ. Есть много способов записать данные на диск и загрузить их позже, направление, которое вы принимаете, будет в значительной степени зависеть от вашей ситуации.

+0

Спасибо, что ответили Кайлом. Да, у меня есть некоторые знания о очередях. Моя проблема - именно то, что я должен использовать, чтобы «сохранить» очередь и загрузить ее снова, когда приложение запустится. У меня нет опыта в этой области. Что бы вы мне порекомендовали? Может быть, «Основные данные» могут быть полезны? Благодаря! – jcdmb

+0

Посмотрите на протокол NSCoding. Пока ваши операции реализуют этот протокол, они могут быть написаны с использованием чего-то вроде [[myQueue operations] writeToFile: @ "somefile"] –

+0

Я думал, что Core Data будет решением, но ваша рекомендация будет проще, поэтому я попробую. Просто начал читать «Руководство по программированию и сериализации программ». Спасибо, Кайл! – jcdmb

Смежные вопросы