2014-09-20 44 views
3

Xcode测试版5中的所有内容都很好,但现在完全成熟Xcode我的应用程序代理中收到2个类似错误:Swift:已更新并出现错误:“无法调用'!='参数列表类型..”

  1. "cannot invoke '!=' with argument list of type '(NSManagedObjectContext, NilLiteralConvertible')"

  2. "cannot invoke '!=' with argument list of type '(NSPersistentStoreCoordinator, NilLiteralConvertible')"

我试着更换!=与==我得到一个不同的错误。我没有看到问题是什么!=。 代码:

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?' does not have a member named '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() 
      } 
     } 
    } 
+0

@iluvcapra我相信它是'类型NSManagedObjectContext' – skyguy 2014-09-20 18:32:37

回答

3

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

===!==在这个意义上不检查平等。这些检查是否两个对象实际上是*相同的对象。不具有相似的值。它们都指向内存中的同一个对象。

您可以在两种指定的类型上进行检查,因为它们是对象。这应该适合你的情况。

关于您的第二个问题,你的代码应该是这样的:

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() 
     } 
    } 
} 

的这里的区别是if let moc = managedObjectContext:如果managedObjectContext不是零,该值存储在常数moc。否则,里面的东西不会被执行。您可以阅读更多关于期权here

+0

所以我解决了这两个erros,但我现在留下了另一个似乎是相关的错误。我会把它放在问题 – skyguy 2014-09-20 18:38:08

+0

@skyguy!==新的错误是什么? – erdekhayser 2014-09-20 18:39:30

+0

只是把它问题 – skyguy 2014-09-20 18:40:06

1

self.managedObjectContext此处键入为NSManagedObjectContext,不是NSManagedObjectContext?

除非是类型Optional<>,实现Equatable,或者本身为零,否则无法将var与nil进行比较。

+0

非常感谢你 – skyguy 2014-09-20 18:37:19

+0

也可以帮助我解决这个新的错误,我作为修复过去2的结果?它在问题 – skyguy 2014-09-20 18:56:24

相关问题