2016-02-16 2 views
-2

Я пытаюсь использовать основные данные со скоростью. И я получилSwift - дополнительная аргументация 'error' в вызове/nil/call может вызывать

Nil не совместим с ожидаемым типом аргумента «()» и вызов может бросить, но он не отмечен «попробовать», и ошибка не обрабатывается

на «context.save (ноль)»

и

дополнительный аргумент 'ошибка' в вызове на "результат вар: NSArray = context.executeFetchRequest (запрос, ошибка: ноль)"

, что случилось?

import UIKit 
import CoreData 

class vcMain: UIViewController { 

    @IBOutlet var txtUsername: UITextField! 
    @IBOutlet var txtPassword: UITextField! 

    @IBAction func btnSave(){ 
     var appDel: AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate) 
     var context: NSManagedObjectContext = appDel.managedObjectContext 


     var newUser = NSEntityDescription.insertNewObjectForEntityForName("Users", inManagedObjectContext: context) as NSManagedObject 

     newUser.setValue("Test Username", forKey: "username") 
     newUser.setValue("Test Password", forKey: "password") 

     print(newUser) 
     print("SAVED") 
     context.save(nil) 

    } 

    @IBAction func btnLoad(){ 
     var appDel: AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate) 
     var context: NSManagedObjectContext = appDel.managedObjectContext 

     var request = NSFetchRequest(entityName: "Users") 
     request.returnsObjectsAsFaults = false; 

     var result: NSArray = context.executeFetchRequest(request, error:nil) 

// - (nullable NSArray *)executeFetchRequest:(NSFetchRequest *)request error:(NSError **)error; 



    } 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

} 
+2

Вы используете Swift 1 в Xcode 7. Но Xcode 7 поставляется с Swift 2. Преобразовать код для Swift 2. Для вашего конкретного случая поиска SO уже есть примеры. – Moritz

ответ

3

executeFetchRequest метод NSManagedObjectContext является функцией метания, так что вам придется обернуть его в заявлении поймать делать и обработать любую ошибку, он может бросить.

var users: [Users] 

do { 
    users = try context.executeFetchRequest(request) as! [Users] 
} catch { 
    // handle error 
} 

Вы также можете попробовать? ключевое слово, если для обработки всех ошибок таким же образом:

if let users = try? context.executeFetchRequest(request) as? [Users] { 

} else { 
    // handle error 
} 

чтения: NSManagedObjectContext Class Reference и Swift error handling