我收到此错误:fatal error: unexpectedly found nil while unwrapping an Optional value
在这个功能中:
func textFieldShouldReturn(textField: UITextField) -> Bool {
tableViewData.append(textField.text)
textField.text = ""
self.tableView.reloadData()
textField.resignFirstResponder()
// Reference to our app delegate
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
// Reference moc
let contxt: NSManagedObjectContext = appDel.managedObjectContext!
let en = NSEntityDescription.entityForName("note", inManagedObjectContext: contxt)
// Create instance of pur data model an initialize
var newNote = Model(entity: en!, insertIntoManagedObjectContext: contxt)
// Map our properties
newNote.note = textField.text
// Save our context
contxt.save(nil)
println(newNote)
// navigate back to root vc
//self.navigationController?.popToRootViewControllerAnimated(true)
return true
}
和这行代码:
var newNote = Model(entity: en!, insertIntoManagedObjectContext: contxt)
有人有解决此错误的方法吗? 我使用xCode 6.0.1。编程语言是Swift,模拟器是用iOS8(iPhone 5s)运行的。
答案 0 :(得分:1)
NSEntityDescription.entityForName("note", inManagedObjectContext: contxt)
会返回NSEntityDescription?
。所以它是可选的,可以是nil
。当你强行打开它(使用!
运算符)时,如果它是nil
,那么你的程序会崩溃。为了避免这种情况,您可以使用if-let
语法。方法如下:
if let entity = NSEntityDescription.entityForName("note", inManagedObjectContext: contxt) {
// Do your stuff in here with entity. It is not nil.
}
然而,在核心数据中,实体的原因变为nil
,或许您将名称“注释”拼写错误。检查你的xcdatamodel文件。
答案 1 :(得分:0)
当您打开包含nil
的可选项时,会发生该错误。如果这是导致错误的行,则它将en
变量设置为nil
,并且您正试图强制解包它。
我无法提供nil
的理由,但我建议避免使用强制解包(即使用!
运算符),而是依赖可选绑定:
if let en = en {
var newNote = Model(entity: en, insertIntoManagedObjectContext: contxt)
// Map our properties
newNote.note = textField.text
// Save our context
contxt.save(nil)
println(newNote)
}
解决了这个例外。您应该调查en
为nil
的原因。