核心数据中的真/假布尔值

时间:2015-07-29 08:09:45

标签: ios swift core-data

开始使用布尔值试图将它们保存在核心数据中,并认为我可以做一个简单的真/假保存对象,但在阅读后我不确定他们是否添加了在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是一个应该存储布尔对象以供调用的数组。我得到一个致命的错误:数组索引超出范围。

1 个答案:

答案 0 :(得分:0)

使用Bool时的核心数据将其转换为NSNumber,此答案可以帮助您:

Swift + CoreData: Can not set a Bool on NSManagedObject subclass - Bug?