我正在设计一个 iPhone 应用程序。我有一个非常紧张的过程要开始,在高层次上定义如下:
- 用户从 UITableView 中选择项目进行应用内购买。
- 用户在 UI 中确认购买。
- 异步过程转到 App Store 以检查项目之前是否已购买。如果没有,则购买该项目。然后通知 iPhone 应用程序购买项目成功。(如果它是之前购买的,则应用程序不关心并继续执行第 4 步。)
- 然后,该应用程序会转到我的私人服务器以下载所购买商品的数据。
- 然后应用程序将数据导入 CoreData。
当然,在流程的每一步,都会向用户报告错误,整个流程就会停止。
我有一个名为 activityIndicatorController 的类,它为用户提供了一个不错的 UIActivityIndicator 以及一些指示正在发生的事情的文本。在流程的每一步,activityIndicator 上的标签都必须更新为新状态。
问题/疑虑:
从设计和编码的角度来看,最简单的事情就是在所有步骤中使用一个大的 NSOperation。但是,我担心这可能会在以后妨碍我。我不想走错路,然后不得不撕下一堆代码。
我的直觉告诉我最好实现三个独立的 NSOperations(OpInAppPurchase、OpDownload、OpImport)。但是,每个后续操作不仅依赖于它之前的操作,而且如果一个操作失败,则根本不应该调用其余的 NSOperations。但是,我不确定如何设计/编码。
任何帮助表示赞赏。
编辑:
感谢大家到目前为止的帮助。对于我想要完成的事情,我不希望用户取消操作。但是,我确实希望该应用程序能够取消后续操作。我没有意识到并且只是通过反复试验(即“duh”时刻)发现的是,当一个操作在一个单独的进程中启动时,任何被启动的子操作也在同一个单独的进程中执行.
在阅读了下面链接的 Apple 文章后,我发现 NSInvocationOperation 完全满足我的需求,并且使我不必为每个进程创建单独的 NSOperation 对象。然后,如果失败,它将使用 NSError 对象对主线程进行回调,或者在成功时对主线程进行不同的回调。
也许我会有一些其他的进程,我确实希望用户将来能够取消,我会将 NSOperation 与其他事件一起使用。