2015-02-23 50 views
0

展開一個可選值我不斷收到以下錯誤:致命錯誤:意外發現零,而使用cloudkit

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 
    } 

} 

回答

2

可能有兩個原因這個問題:

這可能意味着你正在試圖調用函數的對象(questions?)這不是(text?)初始化。

我的猜測是questions未初始化。所以,當你打電話給questions.text時,你正在一個零線上調用文本函數。

確保您的店鋪questions正確地連接在故事板上(您應該在@IBOutlet附近看到一個圓圈)。另外,確保你沒有建立多個連接到你的插座。

2. 你的功能getNewQbutton@IBAction不返回任何內容。所以陳述String(getNewQbutton())沒有太大意義。由於您的函數getNewQbutton沒有返回類型(並且是@IBOutlet),因此您可能會給nil String()。這可能是這個問題的第二個原因。

+0

我檢查了問題的連接,它只連接到一個UILabel。難道這可能是某種方式,這個函數會把一個無價值的東西放到questions.text裏面導致錯誤? – CS8800 2015-02-23 19:52:59

+0

請看我的udpate – 2015-02-23 20:04:06

+1

謝謝,我想我明白了!謝謝youuuu! – CS8800 2015-02-23 20:07:24