致命错误:使用 cloudkit 展开可选值时意外发现 nil

Posted

技术标签:

【中文标题】致命错误:使用 cloudkit 展开可选值时意外发现 nil【英文标题】:fatal error: unexpectedly found nil while unwrapping an Optional value using cloudkit 【发布时间】:2015-02-23 19:40:43 【问题描述】:

我不断收到以下错误:

fatal error: unexpectedly found nil while unwrapping an Optional value 

我想我只是不明白为什么。有人可以帮我找出我的错误吗?可变结果是可选的吗?

错误一直指向viewDidLoad() 中的一行,我评论了哪里。谢谢。

//
//  ViewController.swift
//  Physics Help!
//
//  Created by Sam Hanson on 2/8/15.
//  Copyright (c) 2015 Sam Hanson. All rights reserved.
//


import UIKit
import CloudKit

class ViewController: UIViewController 

//VARIABLES********************************************************

@IBOutlet var c1Answer: UILabel!
@IBOutlet var questions: UILabel!
var resultsOfDB : String = ""
var indexes : [Int] = []
var counter : Int = 0
var newStr : String = ""

//*****************************************************************




override func viewDidLoad() 

    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    self.questions.text = String(getNewQbutton()) //error points to here*********




//load the answers, grab them from the cloud base
@IBAction func loadAnswers() 
    let container = CKContainer.defaultContainer()
    var publicDB = container.publicCloudDatabase

    let myQuery = CKQuery(recordType: "QuestionsTable", predicate: NSPredicate(value: true))

    publicDB.performQuery(myQuery, inZoneWithID: nil)
        results, error in

        if error != nil 
            println(error)
        

        else
        

            dispatch_async(dispatch_get_main_queue(),  () -> Void in

                self.c1Answer.text = results.description
                println(results.description)

            )
        
    






@IBAction func getNewQbutton() 

    let container = CKContainer.defaultContainer()
    var publicDB = container.publicCloudDatabase


    let myQuery = CKQuery(recordType: "QuestionsTable", predicate: NSPredicate(value: true))


    publicDB.performQuery(myQuery, inZoneWithID: nil)
        results, error in

        if error != nil 
            println(error)
        

        else
        

            dispatch_async(dispatch_get_main_queue(),  () -> Void in

                self.resultsOfDB = results.description

                //for each character in resultsOfDB
                for character in self.resultsOfDB

                    if(character == "\"")
                        self.indexes.append(self.counter)

                    
                    self.counter++
                

                self.newStr = self.resultsOfDB.substringWithRange(Range<String.Index>(start: advance(self.resultsOfDB.startIndex, self.indexes[0] + 1), end: advance(self.resultsOfDB.endIndex, -(self.counter - self.indexes[1]))))

                self.questions.text = self.newStr
            )
        
        self.counter = 0
    


【问题讨论】:

【参考方案1】:

这个问题可能有两个原因:

1. 这可能意味着您正在尝试调用未初始化对象 (questions?) 的函数 (text?)。

我的猜测是questions 没有初始化。因此,当您调用 questions.text 时,您是在 nil 插座上调用 text 函数。

确保您的网点questions 正确连接到情节提要中(您应该在@IBOutlet 附近看到一个圆圈)。另外,请确保您没有设置多个连接到您的插座。

2. 你的函数getNewQbutton 是一个@IBAction,它什么都不返回。所以声明String(getNewQbutton()) 没有多大意义。由于您的函数getNewQbutton 没有返回类型(并且是@IBOutlet),您可能将nil 提供给String()。这可能是这个问题的第二个原因。

【讨论】:

我检查了问题的连接,它只连接到一个 UILabel。可能是函数以某种方式将 nil 值放入 questions.text 中导致错误? 谢谢,我想我明白了!谢谢你! 没问题。如果有帮助,请接受答案:)

以上是关于致命错误:使用 cloudkit 展开可选值时意外发现 nil的主要内容,如果未能解决你的问题,请参考以下文章

致命错误:使用 AVAudio 展开可选值时意外发现 nil

Swift 错误致命错误:在展开可选值时意外发现 nil

致命错误:在展开可选值时意外发现 nil - 使用 UITableView

Firebase 数据库 - 致命错误:在展开可选值时意外发现 nil

为啥我收到错误:致命错误:在展开可选值时意外发现 nil?

@IBInspectable 致命错误:在展开可选值时意外发现 nil