无法使用“(nil)”类型的参数列表调用“保存”

Posted

技术标签:

【中文标题】无法使用“(nil)”类型的参数列表调用“保存”【英文标题】:Cannot invoke "save" with an argument list of type "(nil)' 【发布时间】:2015-06-14 18:21:16 【问题描述】:

需要有关打击代码的帮助。刚刚更新到 Xcode 7 测试版

我收到以下错误“无法使用类型为“(nil)'”的参数列表调用“保存”。这在 ios 6 中有效

import UIKit
import CoreData

class ItemViewController: UIViewController 
@IBOutlet weak var textFieldDiveNumber: UITextField!
@IBOutlet weak var textFieldDiveDate: UITextField!
@IBOutlet weak var textFieldDiveLocation: UITextField!


override func viewDidLoad() 
    super.viewDidLoad()

    // Do any additional setup after loading the view.

@IBAction func saveTapped(sender: AnyObject) 

    let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

    let contxt: NSManagedObjectContext = appDel.managedObjectContext
    let en = NSEntityDescription.entityForName("List", inManagedObjectContext: contxt)

    var newItem = Model(entity: (en)!, insertIntoManagedObjectContext: contxt)

    newItem.divenumber = textFieldDiveNumber.text!
    newItem.divedate = textFieldDiveDate.text!
    newItem.divelocation = textFieldDiveLocation.text!

    contxt.save(nil)



    self.navigationController?.popToRootViewControllerAnimated(true)



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





【问题讨论】:

你试过传入NULL吗? 是的,我有,它指出NULL不可用,使用'nil'而不是这个导入的宏 【参考方案1】:

自上周一以来已多次询问此问题,但从 SE iOS 应用中查找和标记重复项很麻烦,所以...

在 Swift 2 中,NSManagedObjectContextsave() 方法标记为 throws,因此您必须处理由此产生的任何错误。 (而且您不会将错误指针作为参数传递。)

您的 Swift 1 代码忽略了错误; Swift 2 等价物是一个空的 catch:

do 
    try context.save()
 catch 
    // you can go about your business. move along. 

不过,忽略错误并不是一个好主意。如果您不想通过在catch 中执行一些有用的操作来使用户可恢复错误,则只需计划因错误而崩溃:

try! context.save()

【讨论】:

【参考方案2】:

Thanx Rickster,我确实在当天早些时候遇到并尝试了您的方法,但没有奏效。 但是当你重新发布你的答案时,我只是这次使用“contxt”而不是“context”再次尝试并且它有效。 非常感谢你。 问候。 德尔

【讨论】:

以上是关于无法使用“(nil)”类型的参数列表调用“保存”的主要内容,如果未能解决你的问题,请参考以下文章

Swift:无法使用类型为“([Idea],来自:Data)”的参数列表调用“解码”

Java基础笔记5

无法使用参数列表调用类型“附加”

无法使用类型为“”的参数列表调用类型“”的初始化程序

无法使用类型为“()”的参数列表为类型“Int”调用初始化程序

无法使用类型参数列表调用“requestAuthorizationToShareTypes”