在 Core Data 存储迁移到新版本时,在 iPhone 应用程序的初始屏幕上显示 MBProgressHUD?

Posted

技术标签:

【中文标题】在 Core Data 存储迁移到新版本时,在 iPhone 应用程序的初始屏幕上显示 MBProgressHUD?【英文标题】:Show MBProgressHUD on iPhone app's splash screen while Core Data store is migrating to new version? 【发布时间】:2011-04-28 15:04:44 【问题描述】:

如果我的 iPhone 应用程序需要更新 Core Data 数据库,我想在我的 iPhone 应用程序加载时向用户显示MBProgressHUD 视图,以便他们知道它正在工作而不是挂起。在数据存储迁移时,我该如何将 MBProgressHUD 添加到启动屏幕?通常我会将它附加到 UIViewController 的视图中,但启动画面位于应用程序委托下。这可以吗?

【问题讨论】:

【参考方案1】:

不,因为它是静态的,所以不可能在初始屏幕上覆盖任何内容。

但是,您可以在应用加载之前将密集过程延迟一段时间,然后在后台线程中进行密集处理时创建一个带有进度指示器的假启动屏幕。

【讨论】:

是否有最佳实践来说明如何做到这一点? 我不能给出细节,因为我以前没有这样做过。但是,我只是假设您应该按照 Alex 在下面所说的去做,即等到 -applicationDidFinishLaunching: 被调用,然后在该方法中(它在您的委托中)创建一个视图控制器并将其显示为模态视图,然后开始您的背景线。完成后,让它向您的委托发送回调,并在该委托方法中删除加载视图。所以基本上你只是在你的委托方法中添加一个视图,并在后台进程完成后将其关闭。【参考方案2】:

您可以在应用程序委托头文件(或“全局”头文件)中创建 #define 宏,如下所示:

#define MyAppDelegate [[UIApplication sharedApplication] delegate]

然后,当您想要访问应用程序委托属性时,您可以在应用程序中已导入该标头(或全局标头)的任何位置执行此操作:

MyAppDelegate.property = foo;
[[MyAppDelegate property] bar];

这可以帮助您在应用生命周期的任何时候管理您的进度视图。

编辑

sudo rm -rf 是正确的,您无法在启动画面期间进行工作。但是您可以在应用程序委托的-applicationDidFinishLaunching: 方法中启动您的进度视图,然后在后台线程上启动工作。后台线程的工作完成后,让回调关闭进度视图。

【讨论】:

以上是关于在 Core Data 存储迁移到新版本时,在 iPhone 应用程序的初始屏幕上显示 MBProgressHUD?的主要内容,如果未能解决你的问题,请参考以下文章

将 Core Data/sqlite 记录迁移到新版本(从 Library 到 Documents 文件夹)

Core Data 和 Restkit 简单轻量级迁移错误

剪切新版本时如何触发 GitLab CI/CD 管道?

用户更新软件后如何保存Core Data?

在 iOS 7 中禁用 Core Data 中的 iCloud(也就是将持久存储文件迁移到本地)

Core Data 自动迁移不会在我的新模型中创建新实体