2015-02-23 51 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