Swift - call / nil / call 中的额外参数“错误”可以抛出

Posted

技术标签:

【中文标题】Swift - call / nil / call 中的额外参数“错误”可以抛出【英文标题】:Swift - Extra argument 'error' in call / nil / call can throw 【发布时间】:2016-02-16 14:20:42 【问题描述】:

我正在尝试快速使用核心数据。 我得到了

Nil 与预期的参数类型 '()' 不兼容,并且 call 可以抛出,但是没有标记'try',错误没有处理

关于“context.save(nil)”

调用中的额外参数“错误” 关于“var 结果:NSArray = context.executeFetchRequest(request, error:nil)”

发生了什么?

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.
    


【问题讨论】:

您在 Xcode 7 中使用 Swift 1。但 Xcode 7 附带 Swift 2。将代码转换为 Swift 2。对于您的特定案例搜索,已经有示例。 【参考方案1】:

NSManagedObjectContext 的 executeFetchRequest 方法是一个抛出函数,因此您必须将它包装在 do catch 语句中并处理它可能抛出的任何错误。

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

【讨论】:

以上是关于Swift - call / nil / call 中的额外参数“错误”可以抛出的主要内容,如果未能解决你的问题,请参考以下文章

Lua - getOrientation() throw Attempt to call global (a nil value)

[Swift中错误]missing argument label 'greeting:' in call

新歌推荐# Taylor Swift - Call It What You Want

Swift 2 jSON Call 可以抛出,但没有用 try 标记

Swift protocol extension method is called instead of method implemented in subclass

Alamofire使用报错Extra argument 'method' in call解决办法