Я работаю над дизайном приложения для iPhone. У меня довольно напряженный процесс, который на высоком уровне определяется следующим образом:
- Пользователь выбирает элемент из UITableView для inApp
покупки.
- Пользователь подтверждает покупку в пользовательском интерфейсе.
- Асинхронный процесс идет в App Store, чтобы проверить, есть ли элемент
был куплен раньше. Если не,
Товар куплен. IPhone
Затем приложение уведомляется, что элемент
покупка прошла успешно. (Если бы это было
купленное ранее приложение
не волнует и переходит к шагу 4.)
- Затем приложение отправляется на мой частный сервер, чтобы загрузить данные для приобретенного предмета.
- Затем приложение импортирует данные в CoreData.
Конечно, на каждом этапе процесса пользователю сообщается об ошибках, и весь процесс останавливается.
У меня есть класс ActivityIndicatorController, который представляет пользователю приятный UIActivityIndicator вместе с некоторым текстом, указывающим, что происходит. На каждом этапе процесса метка в ActivityIndicator должна обновляться с новым статусом.
Вопрос / проблема:
Кажется, с точки зрения дизайна и кодирования, САМОЕ ПРОСТОЕ, что нужно сделать, это использовать одну большую NSOperation для всех шагов. Тем не менее, я обеспокоен тем, что это может помешать мне позже. Я не хочу идти по неправильному пути, а потом вырвать кучу кода позже.
Моя интуиция говорит мне, что было бы ЛУЧШЕ реализовать три отдельных операции NSO (OpInAppPurchase, OpDownload, OpImport). Однако каждая последующая операция зависит не только от предыдущей, но и в случае сбоя остальные операции NSO вообще не должны вызываться. Но я не уверен, как спроектировать / кодировать это.
Любая помощь приветствуется.
EDIT:
Спасибо всем за помощь. За то, что я пытаюсь выполнить, я не хочу, чтобы пользователь отменил операцию. Тем не менее, я хочу, чтобы приложение могло отменить последующие операции. То, что я не смог осознать и только что обнаружил методом проб и ошибок (т. Е. «Тупой» момент), это то, что когда операция запускается в отдельном процессе, любые дочерние операции, которые запускаются, также выполняются в том же отдельном процессе .
После прочтения статьи Apple, ссылки на которую приведены ниже, я обнаружил, что для моих нужд прямо сейчас NSInvocationOperation выполняет именно то, что мне нужно, и избавляет меня от необходимости создавать отдельные объекты NSOperation для каждого процесса. Затем он выполнит обратный вызов с объектом NSError для основного потока в случае сбоя или другой обратный вызов для основного потока в случае успеха.
Возможно, у меня будут другие процессы, которые я хочу, чтобы пользователь мог отменить в будущем, и я буду использовать NSOperation с другими событиями.