Swift:已更新并获得错误:“0”;无法调用'=';参数列表类型为..”;

Swift:已更新并获得错误:“0”;无法调用'=';参数列表类型为..”;,swift,xcode6,Swift,Xcode6,在Xcode beta 5中一切都很好,但现在在成熟的Xcode中,我的应用程序代理中出现了两个类似的错误: “无法使用类型为“(NSManagedObjectContext,NilliterAverable”)的参数列表调用“!=” “无法使用类型为“(NSPersistentStoreCoordinator,nilliterAverable”)的参数列表调用“!=” 我试着换了新的!=有!==我得到了一个不同的错误。我看不出有什么问题!=。 守则: func saveContext () {

在Xcode beta 5中一切都很好,但现在在成熟的Xcode中,我的应用程序代理中出现了两个类似的错误:

  • “无法使用类型为“(NSManagedObjectContext,NilliterAverable”)的参数列表调用“!=”

  • “无法使用类型为“(NSPersistentStoreCoordinator,nilliterAverable”)的参数列表调用“!=”

  • 我试着换了新的!=有!==我得到了一个不同的错误。我看不出有什么问题!=。 守则:

    func saveContext () {
            var error: NSError? = nil
            let managedObjectContext = self.managedObjectContext
            if managedObjectContext != nil { //THIS LINE
                if managedObjectContext.hasChanges && !managedObjectContext.save(&error) {
                    // Replace this implementation with code to handle the error appropriately.
                    // abort() causes the application to generate a crash log and terminate.
                    //println("Unresolved error \(error), \(error.userInfo)")
                    abort()
                }
            }
        }
    
        // #pragma mark - Core Data stack
    
        // Returns the managed object context for the application.
        // If the context doesn't already exist, it is created and bound to the persistent store coordinator for the application.
        var managedObjectContext: NSManagedObjectContext {
            if _managedObjectContext !== nil {
                let coordinator = self.persistentStoreCoordinator
                if coordinator != nil { //THIS LINE
                    _managedObjectContext = NSManagedObjectContext()
                    _managedObjectContext!.persistentStoreCoordinator = coordinator
                }
            }
            return _managedObjectContext!
        }
        var _managedObjectContext: NSManagedObjectContext? = nil
    
    我有一个新错误:
    “'NSManagedObjectContext'没有名为'hasChanges'的成员”
    在此代码中:

    func saveContext () {
            var error: NSError? = nil
            let managedObjectContext = self.managedObjectContext
            if managedObjectContext != nil {
                if managedObjectContext.hasChanges && !managedObjectContext.save(&error) { //This line
                    // Replace this implementation with code to handle the error appropriately.
                    // abort() causes the application to generate a crash log and terminate.
                    //println("Unresolved error \(error), \(error.userInfo)")
                    abort()
                }
            }
        }
    

    self.managedObjectContext
    在这里被键入为
    NSManagedObjectContext
    ,而不是
    NSManagedObjectContext?


    您无法将var与nil进行比较,除非其类型为
    可选
    、实现
    可均衡
    、或本身为nil。

    原因是,可能是NSPersistentStoreCoordinator不符合协议。为了使用
    ==
    =,对象需要符合此协议

    ==
    ==不要检查这种意义上的相等性。它们检查两个对象是否实际上是同一个对象。没有类似的值。它们都指向内存中的同一对象

    您可以检查这两种类型,因为它们是对象。这对你的情况应该很好

    关于第二个问题,您的代码应该如下所示:

    func saveContext () {
        var error: NSError? = nil
        let managedObjectContext = self.managedObjectContext
        if let moc = managedObjectContext {
            if moc.hasChanges && !moc.save(&error) { //This line
                // Replace this implementation with code to handle the error appropriately.
                // abort() causes the application to generate a crash log and terminate.
                //println("Unresolved error \(error), \(error.userInfo)")
                abort()
            }
        }
    }
    

    如果让moc=managedObjectContext
    ,这里的区别是
    :如果
    managedObjectContext
    不为零,则该值存储在常量
    moc
    中。否则,内部的任何内容都不会被执行。您可以阅读有关optionals的更多信息。

    @iluvcapra我相信它属于NSManagedObjectContext类型的
    ,因此我解决了这两个错误,但现在我发现了另一个似乎相关的错误。我会把它放在问题中只是把它放在问题中,你能不能帮我解决这个新的错误,因为我修复了过去的2个错误?这是个问题