【问题标题】:How to save Integer to Core Data?如何将整数保存到核心数据?
【发布时间】:2015-02-26 04:43:50
【问题描述】:

我正在尝试将一个整数保存到 Core Data,但是当我查询该值时,我总是得到“0”。

import UIKit
import CoreData

class RegisterElgin: UIViewController, UIPickerViewDelegate {

var navBar:UINavigationBar=UINavigationBar()

var nameID: String!

@IBOutlet var elginPositionLabel: UILabel!
@IBOutlet var saveButton: UIButton!

var position: String!
var positionNumber: NSNumber!

let elginPosition = ["N/A", "Lifeguard", "Instructor", "Supervisor", "Lifeguard & Instructor", "Lifeguard, Instructor, & Supervisor"]

override func viewDidLoad() {
    super.viewDidLoad()
    setNavBarToTheView()
    addText()
    println(nameID)

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

    func setNavBarToTheView()
    {
        navBar.frame=CGRectMake(0, 0, 375, 64)
        self.view .addSubview(navBar)
    }

    func addText ()
    {

        var label = UILabel(frame:CGRectMake(2, 10, 375, 64))
        //label.center = CGPointMake(160, 284)
        label.textAlignment = NSTextAlignment.Center
        label.text = "Elgin West"
        label.font = UIFont(name:"HelveticaNeue-Bold", size: 16.0)

        self.view.addSubview(label)

    }

func numberOfComponentsInPickerView(PickerView: UIPickerView!) -> Int
{
    return 1
}

func pickerView(pickerView: UIPickerView!, numberOfRowsInComponent component: Int) -> Int
{
    return elginPosition.count
}

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String!
{
    return elginPosition[row]
}

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

    //elginPositionLabel.text = elginPosition[row]
    position = elginPosition[row]
}


@IBAction func buttonTapped(sender: AnyObject) {

    if (position == "Instructor")
    {
        positionNumber = 2
    }

    else
    {
        positionNumber = 4
    }

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

    var context:NSManagedObjectContext = appDel.managedObjectContext!

    var savePosition = NSEntityDescription.insertNewObjectForEntityForName("Users", inManagedObjectContext: context) as NSManagedObject

    savePosition.setValue(positionNumber, forKey: "elginPosition")

    println (positionNumber)

    context.save(nil)

}

}

当我去提取值时:

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

    var context:NSManagedObjectContext = appDel.managedObjectContext!

    var request = NSFetchRequest(entityName: "Users")

    request.returnsObjectsAsFaults = false

    var results: NSArray = context.executeFetchRequest(request, error: nil)!

    if(results.count > 0)
    {
        var res = results [0] as NSManagedObject

        userID = res.valueForKey("userID") as String
        position = res.valueForKey("elginPosition") as NSNumber

        println (position)

    }

我得到'O'。

另外,我尝试将我的核心数据模型设置为整数 16、32 和 64。

【问题讨论】:

    标签: ios core-data swift integer


    【解决方案1】:

    我很久以前写了这段代码来保存到核心数据,这保存了具有多个字段的实体

        let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
        let managedContext = appDelegate.managedObjectContext!
        let entity =  NSEntityDescription.entityForName("Note", inManagedObjectContext: managedContext)
        let note = NSManagedObject(entity: entity!, insertIntoManagedObjectContext:managedContext)
    
        note.setValue(text, forKey: "text")
        note.setValue(hour, forKey: "inTheNext")
    
        var error: NSError?
        if !managedContext.save(&error)
        {
            println("Could not save \(error), \(error?.userInfo)")
        }
    

    这是获取它的代码:

        let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
        let managedContext = appDelegate.managedObjectContext!
    
        let fetchRequest = NSFetchRequest(entityName:"Note")
    
        var error: NSError?
    
        let fetchedResults = managedContext.executeFetchRequest(fetchRequest, error: &error) as [NSManagedObject]?
    
        if let results = fetchedResults
        {
            self.notes = results
        }
        else
        {
            println("Could not fetch \(error), \(error!.userInfo)")
        }
    

    get 代码获取所有值(不要使用查询),我看到你也没有使用查询,所以这应该对你有所帮助

    【讨论】:

    • 一个实体中可以拥有的属性数量是否有限制?当我将数据保存到新实体时,它可以工作?!?!
    • 不,属性没有限制,当您将数据保存到新实体时,是的,它会生成新实体
    • 那么为什么它不能在具有 5 个现有属性的实体中与只有一个属性的实体中不起作用??
    • 我没有正确阅读您的代码,但乍一看,我认为保存不是 100% 正确的,在获取值 context.executeFetchRequest 返回 [NSManagedObject] 时也是如此。 ,我没有尝试 NSArray 但我认为它有问题
    • 但我在其他视图控制器中使用完全相同的代码,而且效果很好....很奇怪。
    猜你喜欢
    • 2011-12-27
    • 2016-08-19
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-14
    相关资源
    最近更新 更多