开始使用布尔值试图将它们保存在核心数据中,并认为我可以做一个简单的真/假保存对象,但在阅读后我不确定他们是否添加了在swift中执行此操作的能力。我读了另一篇文章Swift + CoreData:无法在NSManagedObject子类上设置Bool - Bug?。阅读它让我相信他们改变了这一点,以便它能够根据第一个答案的编辑保存简单的布尔值。
所以我用Bool而不是NSNumber创建了类,并尝试将对象设置为true并保存对象。它似乎不起作用。所以我的问题是你还必须用NSNumber设置对象吗?
我面临的问题是,当我将Bool保存为true后,尝试使用获取请求调用数据时,默认值设置为No,如果我理解正确,则应该= false,我应该能够回想起来哪个属性是通过我作为var创建的getter实现的,它循环检查对象是什么并将其作为字符串返回。但这并不起作用。
我在我的按钮中使用的代码发布在下面。然而,我面临的问题是,当我尝试检索要使用的存储数据时,返回
let entity = NSEntityDescription.entityForName("Class", inManagedObjectContext: classMOC!)
let newObject = NSManagedObject(entity: entity!, insertIntoManagedObjectContext:classMOC!)
newObject.setValue(true, forKey: "isHunter")
我正在尝试使用一种方便的方法,允许我在tableview中返回真/假检查的字符串。该代码如下:
import Foundation
import CoreData
class Class: NSManagedObject {
@NSManaged var isDruid: Bool
@NSManaged var isHunter: Bool
@NSManaged var isMage: Bool
@NSManaged var isPaladin: Bool
@NSManaged var isPriest: Bool
@NSManaged var isRogue: Bool
@NSManaged var isShaman: Bool
@NSManaged var isWarlock: Bool
@NSManaged var isWarrior: Bool
@NSManaged var classfaced: NSSet
@NSManaged var classSelection: NSSet
@NSManaged var playersclass: NSSet
@NSManaged var totalclassfaced: NSSet
var className: String {
get {
if isDruid{
return "Druid"
} else {
if isHunter {
return "Hunter"
} else {
if isMage {
return "Mage"
} else {
if isPaladin {
return "Paladin"
} else {
if isPriest {
return "Priest"
} else {
if isRogue {
return "Rogue"
} else {
if isShaman {
return "Shaman"
} else {
if isWarlock {
"Warlock"
} else {
if isWarrior {
return "Warrior"
}
}
}
}
}
}
}
}
}
return ""
}
}
}
最后,我在tableview中使用的方法是:
let aDeck = savedDecksClass[indexPath.row]
cell.detailTextLabel?.text = aDeck.className
aDeck是一个应该存储布尔对象以供调用的数组。我得到一个致命的错误:数组索引超出范围。
答案 0 :(得分:0)
使用Bool
时的核心数据将其转换为NSNumber
,此答案可以帮助您:
Swift + CoreData: Can not set a Bool on NSManagedObject subclass - Bug?