【问题标题】:CoreData. Some data have a 'nil' and zero value核心数据。一些数据具有“零”和零值
【发布时间】:2015-09-03 07:57:56
【问题描述】:

我不知道为什么,但我的一些数据具有零值和零值。 我的实体由 1 个 NSDate 和 5 个浮点属性组成。 我有四个滑块来设置其中四个的值,其中一个是计算的(其他 4 个的算术平均值),NSDate 只存储当前日期和时间。

var appDel:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

    var context:NSManagedObjectContext = appDel.managedObjectContext!

    var newHowDoYouFeel = NSEntityDescription.insertNewObjectForEntityForName("HowDoYouFeel", inManagedObjectContext: context) as! NSManagedObject

   // var howDoYouFeels  = [HowDoYouFeel]()

    var totalAfter = (slider1!.value + slider2!.value + slider3!.value + slider4!.value)/4

    newHowDoYouFeel.setValue(totalBefore, forKey: "totalBefore")
    newHowDoYouFeel.setValue(focusBefore, forKey: "focusBefore")
    newHowDoYouFeel.setValue(moodBefore, forKey: "moodBefore")
    newHowDoYouFeel.setValue(relaxBefore, forKey: "relaxBefore")
    newHowDoYouFeel.setValue(energyBefore, forKey: "energyBefore")
    newHowDoYouFeel.setValue(NSDate(), forKey: "date")

    newHowDoYouFeel.setValue(totalAfter, forKey: "totalAfter")
    newHowDoYouFeel.setValue(slider1!.value, forKey: "focusAfter")
    newHowDoYouFeel.setValue(slider2!.value, forKey: "moodAfter")
    newHowDoYouFeel.setValue(slider3!.value, forKey: "relaxAfter")
    newHowDoYouFeel.setValue(slider4!.value, forKey: "energyAfter")
    newHowDoYouFeel.setValue(NSDate(), forKey: "date")

    context.save(nil)

这是获取数据的代码:

 var appDel:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        var context:NSManagedObjectContext = appDel.managedObjectContext!
        var newHowDoYouFeel = NSEntityDescription.insertNewObjectForEntityForName("HowDoYouFeel", inManagedObjectContext: context) as! NSManagedObject
        var howDoYouFeels  = [HowDoYouFeel]()
        var fetchRequest = NSFetchRequest(entityName: "HowDoYouFeel")
        fetchRequest.returnsObjectsAsFaults = false
        var error : NSError?



        if let howDoYouFeels = context.executeFetchRequest(fetchRequest, error: &error) as? [HowDoYouFeel]{

            println("count is: \(howDoYouFeels.count)")



               if howDoYouFeels.count > 0 {
                for howDoYouFeel in howDoYouFeels {
                 println(howDoYouFeel)
                }
               }
}
}
        else {
            println("empty")

        }
    }

    else {
        println("Fetch failed: \(error)")

    }

NSManaged 类看起来像这样:

import Foundation
import CoreData

类 HowDoYouFeel: NSManagedObject {

@NSManaged var totalBefore: Float
@NSManaged var totalAfter: Float
@NSManaged var focusBefore: Float
@NSManaged var focusAfter: Float
@NSManaged var moodBefore: Float
@NSManaged var moodAfter: Float
@NSManaged var relaxBefore: Float
@NSManaged var relaxAfter: Float
@NSManaged var energyBefore: Float
@NSManaged var energyAfter: Float
@NSManaged var date: NSDate

}

但是当我尝试打印它时,一些数据看起来像这样:

<Scroll_tab.HowDoYouFeel: 0x7fe4624380c0> (entity: HowDoYouFeel; id: 0x7fe462428430 <x-coredata:///HowDoYouFeel/t289EB596-9019-441F-86F0-7225F85A46B23> ; data: {
    date = nil;
    energyAfter = 0;
    energyBefore = 0;
    focusAfter = 0;
    focusBefore = 0;
    moodAfter = 0;
    moodBefore = 0;
    relaxAfter = 0;
    relaxBefore = 0;
    totalAfter = 0;
    totalBefore = 0;

并且有些数据可以具有所有正确的值。

我做错了什么?

【问题讨论】:

    标签: database swift null zero


    【解决方案1】:

    好吧,你所有的原语都是 0,因为这是它们在设置之前的默认值。您的日期是一个对象,而不是原始数据,这就是为什么它是 nil 而不是 0(Nil 表示对象引用没有值)。

    我不知道 newHowDoYouFeel 发生了什么,但是对于 howDoYouFeels 数组,它看起来像是由返回的一个或多个 howDoYouFeel 对象

    context.executeFetchRequest(fetchRequest, error: &error)
    

    尚未设置任何成员。您在最后一段代码摘录中看到的是一个 howDoYouFeel,它已创建,但在 print 语句之前保持不变。

    或者至少这是我的新手意见。我会检查您的获取请求(它的代码或您的实现)是否会导致问题。

    【讨论】:

    • 抱歉,Anthony,但您所说的“这是创建的,但在打印声明之前一直保持不变”是什么意思?
    • howDoYouFeel 已创建(否则您将获得空指针异常),但它看起来好像从未将其数据设置为任何适当的值。您看到的奇怪数据(0 和 nil)是您的变量的默认值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多