相关疑难解决方法(0)

领域架构版本 0 小于上一个版本 1 Swift

我更新了我的数据模型并在应用程序中编写了迁移:didFinishLaunchingWithOptions per Realm 文档:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    let config = Realm.Configuration(

        schemaVersion: 1,


        migrationBlock: { migration, oldSchemaVersion in

            if (oldSchemaVersion < 1) {

            }
    })

           Realm.Configuration.defaultConfiguration = config

        let realm = try! Realm()
Run Code Online (Sandbox Code Playgroud)

我的初始 VC 有一个 tableView 并嵌入到一个导航控制器中,该控制器调用领域,如下所示:

class AllRoundsVC: UIViewController, UITableViewDelegate, UITableViewDataSource {
let realm = try! Realm()
Run Code Online (Sandbox Code Playgroud)

当我这样离开时,我的应用程序在启动时崩溃,显示“致命错误:'尝试!' 表达式意外引发错误:Error Domain=io.realm Code=0 “Provided schema version 0 is less than last set version 1.” UserInfo={NSLocalizedDescription=Provided schema version 0 is less than last set …

realm uitableview ios

6
推荐指数
1
解决办法
9277
查看次数

在初始化第一个视图控制器之前运行代码(基于故事板的应用程序)

我的应用程序需要执行一些清理任务 - 删除本地存储的旧数据 - 每次启动时,在显示初始视图控制器之前。

这是因为初始视图控制器在初始化时加载现有数据,并将其显示在表视图中。

我设置了几个断点,并发现初始视图控制器的初始化程序 ( init?(coder aDecoder: NSCoder)) 运行之前 application(_:didFinishLaunchingWithOptions)- 甚至之前application(_:**will**FinishLaunchingWithOptions),准确地说。

可以将清理代码放在视图控制器初始值设定项的最顶部,但我想将清理逻辑与任何特定屏幕分离。有一天,那个视图控制器可能最终不会成为最初的视图控制器。

覆盖应用程序委托的init()方法并将我的清理代码放在那里确实可以完成工作,但是......

题:

没有更好/更优雅的方式吗?


注:供参考,相关方法的执行顺序如下:

  1. AppDelegate.init()
  2. 视图控制器.init()
  3. AppDelegate.application(_:willFinishLaunchingWithOptions:)
  4. AppDelegate.application(_:didFinishLaunchingWithOptions:)
  5. ViewController.viewDidLoad()

澄清:

清理任务不冗长,也不需要异步运行:相反,我宁愿如果我的初始视图控制器甚至没有实例化,直到它完成(我清楚,如果它需要的系统会杀了我的应用程序启动时间很长。但是,它只是删除了一些本地文件,没什么大不了的。)。

我问这个问题主要是因为,在故事板出现之前,应用程序启动代码如下所示:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];

    // INITIAL VIEW CONTROLLER GETS INSTANTIATED HERE 
    // (NOT BEFORE):
    MyViewController* controller = …
Run Code Online (Sandbox Code Playgroud)

uiviewcontroller ios uistoryboard appdelegate

5
推荐指数
1
解决办法
2466
查看次数