数组索引超出范围 - 可选解除绑定时出错

Ril*_*Dev -1 arrays core-data optional ios swift

我有一个名为type Settings的属性调用的实体,如果它是1,那么视图控制器将具有白色背景,如果为0,则背景为深灰色.backgroundColorInt

但是在尝试打开视图控制器时出现以下错误;

致命错误:数组索引超出范围

对于我的函数中的以下行

    if settingsArray.count == 1 {
        setting = settingsArray[1]
    } else if settingsArray.count <= 0 {
      println("No settings in array")
    }
Run Code Online (Sandbox Code Playgroud)

查看控制器

var settingsArray: [Settings]! 
var setting: Settings!
var backgroundSetting: Bool = true

override func viewWillAppear(animated: Bool) {
    backgroundSettings()
}

override func viewDidLoad() {
    super.viewDidLoad()
    backgroundSettings()
}

// Function to fetch settings and change background
func backgroundSettings() {

    var error: NSError?
    let request = NSFetchRequest(entityName: "Settings")
    self.settingsArray = moc?.executeFetchRequest(request, error: &error) as! [Settings]

    if settingsArray.count == 1 {
        setting = settingsArray[1]
    } else if settingsArray.count <= 0 {
      println("No settings in array")
    }

    if setting != nil {

        if setting.backgroundColor == 1 {
            backgroundSetting = true
        } else if setting.backgroundColor == 0{
            backgroundSetting = false
        }

    }


    if backgroundSetting == true {
        self.view.backgroundColor = UIColor.whiteColor()
    } else if backgroundSetting == false {
        self.view.backgroundColor = UIColor.darkGrayColor()
    }

}

//Button to change the color and settings
@IBAction func backgroundColor(sender: AnyObject) {


    if setting != nil {

        if setting.backgroundColor == 1 {
            setting.backgroundColor = 0
        } else {
            setting.backgroundColor = 1
        }

        var error: NSError?
        moc?.save(&error)

    } else {

        println("No settings available")

        var settings = NSEntityDescription.insertNewObjectForEntityForName("Settings", inManagedObjectContext: moc!) as! Settings

        settings.backgroundColor = 1

        var error: NSError?
        moc?.save(&error)

    }

    backgroundSettings()

}
Run Code Online (Sandbox Code Playgroud)

我可能会出错的任何想法?

Jan*_*ash 5

在Swift中(如在Objective C和许多其他语言中),数组的索引从0开始.(有关此列表,请参阅此维基百科文章.)

这意味着当您检查时if settingsArray.count == 1,列表中将只有(确切地)一个项目.由于索引从0开始,因此该项将位于索引0处,因此为Error.

因此要么检查是否settingsArray.count == 2离开setting = settingsArray[1],要么改为setting = settingsArray[0].