简体   繁体   English

将Int16类型的Integer保存到Core Data-Swift

[英]Saving an Integer of type Int16 to Core Data - Swift

I have a working app that saves a variety of different data points to Core Data. 我有一个可以运行的应用程序,可以将各种不同的数据点保存到Core Data。 Every single item that saves to a String type field saves just find (I prove it out by fetching it afterwards and printing to screen). 保存到String type字段的每个项目都只是找到而已(我通过事后取出并打印到屏幕来证明这一点)。 However, I'm having trouble with an integer field (Specifically the Int16 data type). 但是,我在整数字段(特别是Int16数据类型)上遇到了麻烦。 Is there something wrong specifically with the line of code below trying to save the "activityOrder"? 尝试保存“ activityOrder”的以下代码行特别存在问题吗?

    let newActivity = NSEntityDescription.insertNewObjectForEntityForName("Activities", inManagedObjectContext: context) as NSManagedObject

    newActivity.setValue(selectedOwnerName, forKey: "activityOwner")
    newActivity.setValue(selectedActivityType, forKey: "activityType")
    newActivity.setValue(newNumber, forKey: "activityOrder")

    //save the record
    do {
        try newActivity.managedObjectContext?.save()
    } catch {
        print(error)
    }

I can confirm that the variable "newNumber" has a value, and is 1 in fact. 我可以确认变量“ newNumber”有一个值,实际上是1。 the "activityOwner" and "activityType" fields save properly (again, they are all String type fields). “ activityOwner”和“ activityType”字段将正确保存(同样,它们都是String类型的字段)。

Here is the code I'm using to check if there is anything in there: 这是我用来检查其中是否有任何代码的代码:

    let orderFetchRequest: NSFetchRequest = NSFetchRequest(entityName: "Activities")
    orderFetchRequest.returnsObjectsAsFaults = false
    orderFetchRequest.fetchLimit = 1

    do {
        let orderResults = try appDelegate.managedObjectContext.executeFetchRequest(orderFetchRequest)
        orderData = orderResults as! [NSManagedObject]
    } catch let error as NSError {
        print("Could not fetch \(error), \(error.userInfo)")
    }

    let orderSortDescriptor = NSSortDescriptor(key: "activityOrder", ascending: true)
    orderFetchRequest.sortDescriptors = [orderSortDescriptor]

    print(orderData)

Effectively I print our "orderData" which prints the entire record (which is where I see values for all String data but nil for the order) 我有效地打印了“ orderData”,该“ orderData”打印了整个记录(在这里我看到所有String数据的值,但该命令为nil)

I'm fairly new to Core Data and Swift. 我是Core Data和Swift的新手。 Do Integers behave differently from Strings when saving to Core Data? 保存到核心数据时,整数的行为与字符串不同吗?

Core data could save only Object type. 核心数据只能保存对象类型。 So if you want to dave Int type then convert it first into NSNumber object then save into Core Data. 因此,如果您想使用Int类型,请先将其转换为NSNumber对象,然后再保存为Core Data。

let newActivity = NSEntityDescription.insertNewObjectForEntityForName("Activities", inManagedObjectContext: context) as NSManagedObject
newActivity.setValue(selectedOwnerName, forKey: "activityOwner")
newActivity.setValue(selectedActivityType, forKey: "activityType")
newActivity.setValue(NSNumber(short: newNumber), forKey: "activityOrder")

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM