我正在尝试使用核心数据更改视图控制器的背景颜色,以便在重新打开应用程序时保存设置。我有一个名为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()
}
答案 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
}