当前位置: 首页 > 面试题库 >

在appDelegate中进行Swift 2迁移saveContext()

轩辕鸿祯
2023-03-14
问题内容

我刚刚下载了新的Xcode 7.0 beta,并完成了从Swift 1.2到Swift
2的迁移。迁移显然并没有改变整个代码,实际上,方法saveContext()很好,直到抛出2条错误为止:

if moc.hasChanges && !moc.save() {

二进制运算符“ &&”不能应用于两个布尔操作数

可以抛出呼叫,但未将其标记为“ try”,并且未处理错误

该方法如下所示:

// MARK: - Core Data Saving support
func saveContext () {
    if let moc = self.managedObjectContext {
        var error: NSError? = nil
        if moc.hasChanges && !moc.save() {
            // Replace this implementation with code to handle the error appropriately.
            // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
            NSLog("Unresolved error \(error), \(error!.userInfo)")
            abort()
        }
    }
}

关于如何使其运作的任何想法?


问题答案:

您提供的两个错误中的第一个是令人误解的,但第二个是正确的。问题在于,!moc.save()从Swift
2开始,不再返回Bool,而是对其进行了注释throws。这意味着您必须使用try此方法及其catch可能发出的任何异常,而不仅仅是检查其返回值是true还是false。

为了反映这一点,在Xcode 7中使用Core Data创建的新项目将产生以下样板代码,这些样板代码可以替换您正在使用的代码。

func saveContext () {
    if managedObjectContext.hasChanges {
        do {
            try managedObjectContext.save()
        } catch {
            // Replace this implementation with code to handle the error appropriately.
            // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
            let nserror = error as NSError
            NSLog("Unresolved error \(nserror), \(nserror.userInfo)")
            abort()
        }
    }
}


 类似资料:
  • 问题内容: 我使用 laravel 5.5 创建了一个Auth项目并创建了新的迁移,并且在迁移时收到此错误消息: 在Connection.php第647行中: 在Connection.php第449行中: 我尝试php artisan migration –force和php artisan migration:rollback 并尝试删除所有表格并再次迁移,仍然会遇到此错误 问题答案: 在CMD

  • 问题内容: 我在夹层中使用Django1.7。我创建了简单的配置文件(根据Mezzanine文档),存储在单独的应用程序“配置文件”中: 创建迁移会返回: 当我运行“迁移配置文件”时: 问题是,当我尝试打开与mezzanine.accounts相关的任何页面(例如更新帐户)时,它崩溃并显示: 我做错了什么? 问题答案: 在MySQL数据库中,从表中删除行。 删除迁移文件夹中的所有迁移文件。 重试并

  • 问题内容: 我了解到使用Java进行flywaydb迁移可与JDBC连接一起使用,并且还可以通过SpringTemplate进行spring支持,但是flyway不适用于DAO。 对于具有更多关系的表/实体,使用DAO而不是sql进行迁移使工作变得更加容易。 是否有解决方案或解决方法来解决此问题? 问题答案: 首先,Flyway拥有自己的事务管理系统,并且不使用Spring事务处理。 如果您的DA

  • 我正在尝试使用Flyway运行数据库迁移脚本。我有两个SQL脚本和一个Java脚本正在尝试运行。当我跑步的时候/gradlew flywayMigrate或gradle flywayMigrate它只接受SQL脚本,而不接受Java脚本 我的项目设置如下: database_migrations 我尝试了多种解决方案来让java脚本运行,例如指定,但这只会导致此输出。我尝试过将其移动到其他包。我尝

  • 我正在flyway的CMD中运行命令,但脚本文件的迁移会出现以下异常 [错误]无法执行目标组织。flywaydb:flyway maven插件:3.2.1:在convertopia auto db:org项目上迁移(默认cli)。flywaydb。果心应用程序编程接口。FlywayException:验证失败。迁移1.0.53的迁移描述不匹配[错误]- 我尝试过,它说构建成功,但问题仍然没有解决。

  • 问题内容: 我正在尝试使用任何语法,但无法考虑如何正确编写此代码: 也尝试过 和双引号等。运行迁移时,总是得到以下信息: 语法错误或访问冲突:1064您的SQL语法有错误。检查 与您的MariaDB服务器版本相对应的手册以获取正确的语法,以在第1行的“用户”修改“年龄” DATETIME附近使用 是的,我已经检查过,MariaDB使用MySQL的语法(至少在这种情况下)。 问题答案: 使用反引号而