I have just downloaded the new Xcode 7.0 beta and did a migration from Swift 1.2 to Swift 2. The migration apparently did not change the whole code, in fact a method saveContext() which was fine until throws 2 errors for the line:
if moc.hasChanges && !moc.save() {
Binary operator '&&' cannot be applied to two Bool operands
and
Call can throw, but it is not marked with 'try' and the error is not handled
The method looks like this:
// 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()
}
}
}
Any ideas on how to get it working?
The first of the two errors you provided is misleading, but the second is spot on. The problem is in
!moc.save()
which as of Swift 2, no longer returns Bool and is instead annotatedthrows
. This means that you you have totry
this method andcatch
any exceptions that it may emit, instead of just checking wether its return value is true or false.To reflect this, a new project created in Xcode 7 using Core Data will produce the following boilerplate code which can replace the code you're using.