Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios I';我使用核心数据,我的布尔值被解读为一个数字_Ios_Swift_Core Data_Persistence - Fatal编程技术网

Ios I';我使用核心数据,我的布尔值被解读为一个数字

Ios I';我使用核心数据,我的布尔值被解读为一个数字,ios,swift,core-data,persistence,Ios,Swift,Core Data,Persistence,我使用的是核心数据,当我试图读取我的属性时,它们被读取为数字,如0和1。这是我的核心数据设置。我的最终目标是将布尔值保存为true或false,然后按原样读取它。我的设置是否有问题,或者遗漏了什么?我已经看过那篇文章了 除了在OBJ C中,我相信布尔现在在数据模型选项中是可用的 func saveFilters(bathAny: Bool, bath1: Bool, bath2: Bool, bath3: Bool, bath4: Bool){ let context = getCon

我使用的是核心数据,当我试图读取我的属性时,它们被读取为数字,如0和1。这是我的核心数据设置。我的最终目标是将布尔值保存为true或false,然后按原样读取它。我的设置是否有问题,或者遗漏了什么?我已经看过那篇文章了 除了在OBJ C中,我相信布尔现在在数据模型选项中是可用的

 func saveFilters(bathAny: Bool, bath1: Bool, bath2: Bool, bath3: Bool, bath4: Bool){
    let context = getContext()

    let entity = NSEntityDescription.entity(forEntityName: "FilterCoreDataObj", in: context)
    let transc = NSManagedObject(entity: entity!, insertInto: context)

    //SET ENTITY VALUES 

    transc.setValue(bathAny, forKey: "bathAny")
     transc.setValue(bath1, forKey: "bath1")
     transc.setValue(bath2, forKey: "bath2")
     transc.setValue(bath3, forKey: "bath3")
     transc.setValue(bath4, forKey: "bath4")


    do {
        try context.save()
        print("saved")
    } catch let error as NSError {
        print("could not save \(error), \(error.userInfo)")
    } catch {

    }
}
阅读功能

  func getTranscriptions(bathAny: Bool, bath1: Bool, bath2: Bool, bath3: Bool, bath4: Bool) {
    let fetchRequest: NSFetchRequest<FilterCoreDataObj> = FilterCoreDataObj.fetchRequest()

    do {
        let searchResults = try getContext().fetch(fetchRequest)
        print("num of results = \(searchResults.count)")
        for trans in searchResults  {
            print("bath 1 \(trans.value(forKey: "bath1"))")


        }


    } catch {
        print("Error with request: \(error)")
    }

}
func-getTranscriptions(bathAny:Bool,bath1:Bool,bath2:Bool,bath3:Bool,bath4:Bool){
let fetchRequest:NSFetchRequest=FilterCoreDataObj.fetchRequest()
做{
让searchResults=try getContext().fetch(fetchRequest)
打印(“结果数=\(searchResults.count)”)
搜索结果中的trans{
打印(“巴斯1\(交易价值(forKey:“巴斯1”)))
}
}抓住{
打印(“请求错误:\(错误)”)
}
}

如果您选择一个属性,然后打开“数据模型检查器”选项卡。有一个“使用标量类型”选项,允许您直接使用
Bool
类型,而不是基本的
NSNumber

我可以确认,在Swift 3中(使用自动生成的托管对象子类),这是开箱即用的

如果创建自己的NSManagedObject子类(或扩展),则需要公开该属性

p、 作为旁注,我猜您的project目前没有对NSManagedObjects使用任何子类或扩展。如果您不熟悉使用CoreData,这可能是一个令人困惑的话题,因为CoreData工具在使用Xcode 8时发生了巨大的变化

作为简短的介绍,您可以为您的实体手动创建一个子类(或扩展)(或者我的首选项—让Xcode自动为您生成它们)

在您的情况下,扩展如下所示:

extension FilterCoreDataObj {
    @NSManaged public var bathAny: Bool
    @NSManaged public var bath1: Bool
    @NSManaged public var bath2: Bool
    @NSManaged public var bath3: Bool
    @NSManaged public var bath4: Bool
} 
然后,使用实体变得容易得多,因为您可以直接访问属性,而不是使用字符串作为键路径:

func saveFilters(bathAny: Bool, bath1: Bool, bath2: Bool, bath3: Bool, bath4: Bool){

    let context = getContext()

    let transc = FilterCoreDataObj(context: context)
    //SET ENTITY VALUES

    transc.bathAny = bathAny
    transc.bath1 = bath1
    transc.bath2 = bath2
    transc.bath3 = bath3
    transc.bath4 = bath4

    do {
        try context.save()
        print("saved")
    } catch let error as NSError {
        print("could not save \(error), \(error.userInfo)")
    } catch {

    }
}

如果选择一个属性,然后打开“数据模型检查器”选项卡,其中有一个“使用标量类型”选项,允许您直接使用
Bool
类型,而不是基本的
NSNumber

我可以确认,在Swift 3中(使用自动生成的托管对象子类),这是开箱即用的

如果创建自己的NSManagedObject子类(或扩展),则需要公开该属性

p、 作为旁注,我猜您的project目前没有对NSManagedObjects使用任何子类或扩展。如果您不熟悉使用CoreData,这可能是一个令人困惑的话题,因为CoreData工具在使用Xcode 8时发生了巨大的变化

作为简短的介绍,您可以为您的实体手动创建一个子类(或扩展)(或者我的首选项—让Xcode自动为您生成它们)

在您的情况下,扩展如下所示:

extension FilterCoreDataObj {
    @NSManaged public var bathAny: Bool
    @NSManaged public var bath1: Bool
    @NSManaged public var bath2: Bool
    @NSManaged public var bath3: Bool
    @NSManaged public var bath4: Bool
} 
然后,使用实体变得容易得多,因为您可以直接访问属性,而不是使用字符串作为键路径:

func saveFilters(bathAny: Bool, bath1: Bool, bath2: Bool, bath3: Bool, bath4: Bool){

    let context = getContext()

    let transc = FilterCoreDataObj(context: context)
    //SET ENTITY VALUES

    transc.bathAny = bathAny
    transc.bath1 = bath1
    transc.bath2 = bath2
    transc.bath3 = bath3
    transc.bath4 = bath4

    do {
        try context.save()
        print("saved")
    } catch let error as NSError {
        print("could not save \(error), \(error.userInfo)")
    } catch {

    }
}

swift可能与一号井重复,swift 3号井的岩心数据发生了很大变化。在datModel中,它似乎还允许您将属性设置为布尔值。可能与第一口井重复的是swift,swift 3中的核心数据发生了很大变化。在datModel中,它似乎还允许您将属性设置为布尔值。感谢您给出的救生答案!!我想知道你是否可以再回答一个关于核心数据的问题。所以我试图用核心数据保存一组自定义对象。自定义对象已经存在,但我不确定如何编写和保存它们。我可以保存自定义对象吗?如果是的话,它会是一个属性吗,?我该怎么把类型改成那样呢?或者我会为该对象创建一个类,并设置每个属性以匹配该对象中存在的内容?谢谢你的帮助。如果您愿意,我将在另一个问题中打开它,这样您就可以在那里回答。如果您不想将自定义对象建模为它自己的CoreData实体,您可以使用
可转换的
属性保存自定义对象。这里的简单答案是让您的自定义对象实现
NSCoding
协议,以便您的核心数据存储可以将您的对象转换为二进制blob来存储。我试着找到一个相关的问题来链接,但令人惊讶的是(对于Swift)还没有被问到。我会在一个我猜的问题中发布它,并在我确定要对对象建模并且遇到问题后链接它。问题是。顺便说一句,你的帮助非常有帮助。如果您需要任何代码检查或任何事情,请告诉我。谢谢您的救生答案!!我想知道你是否可以再回答一个关于核心数据的问题。所以我试图用核心数据保存一组自定义对象。自定义对象已经存在,但我不确定如何编写和保存它们。我可以保存自定义对象吗?如果是的话,它会是一个属性吗,?我该怎么把类型改成那样呢?或者我会为该对象创建一个类,并设置每个属性以匹配该对象中存在的内容?谢谢你的帮助。如果您愿意,我将在另一个问题中打开它,这样您就可以在那里回答。如果您不想将自定义对象建模为它自己的CoreData实体,您可以使用
可转换的
属性保存自定义对象。这里的简单答案是让您的自定义对象实现
NSCoding
协议,以便您的核心数据存储可以将您的对象转换为二进制blob来存储。我试着找到一个相关的问题来链接,但令人惊讶的是(对于Swift)还没有被问到。我会在一个我猜的问题中发布它,并在我确定要对对象建模并且遇到问题后链接它。问题是。顺便说一句,你的帮助非常有帮助。如果您需要任何代码检查或任何东西,请让m