如何使用Core Data更改View.backgroundColor

时间:2015-07-26 12:58:29

标签: ios swift core-data

我正在尝试使用核心数据更改视图控制器的背景颜色,以便在重新打开应用程序时保存设置。我有一个名为Settings的实体,其属性backgroundColor属于Bool,如果为true,则视图将显示白色背景,如果为false则为黑色。

但据我所知,我正在重新创建多个设置而不是引用一个。 如何在不使用数组的情况下更改一个设置类?目前我正在转换为数组,但它没有任何意义,并在打开视图时出错。

  

数组索引超出范围

设置类

class Settings: NSManagedObject {

@NSManaged var backgroundColor: NSNumber

}

查看控制器

更新:

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


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

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

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()
    }

}

@IBAction func button(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()
}

1 个答案:

答案 0 :(得分:0)

您应该创建一个检查以查看某个对象是否已存在背景颜色,如果是,则编辑该对象而不是创建新对象,如果不是,则创建&amp;保存一个新的。

您可以声明一个可选属性,比如说

var existingSetting: Setting?

然后在初始提取中,尝试分配

self.settings = moc?.executeFetchRequest(request, error: &error) as! [Settings]

if let thisSetting = settings?[0] {

    existingSetting = thisSetting

}


if existingSetting != nil {

    // Set your color based on true / false
} else {
    // perform a default action
}

然后进入你的行动

// Set your context

if existingSetting != nil {

    //Update this setting object

    existingSetting = true or false 
    // Save the context
} else {
    // Create a new setting
    // Save the context
}