从核心数据中获取 Double 返回到文本字段

Posted

技术标签:

【中文标题】从核心数据中获取 Double 返回到文本字段【英文标题】:get Double back from core data into text field 【发布时间】:2017-02-08 00:56:05 【问题描述】:

我正在尝试将数字放入核心数据中,然后将它们取回。我已经可以使用字符串进行此操作,并且一切正常,但是尝试使用双打来进行操作似乎可以存储它们但不能检索它们。下面是我的代码。希望有人能帮忙,如果可以的话提前谢谢。

要检索...

    func getTranscriptions18CW () 

    let fetchRequest: NSFetchRequest<TextInputs> = TextInputs.fetchRequest()
    do 
        //go get the results
        let searchResults18CW = try getContext().fetch(fetchRequest)

        if indexPageSum == 18 
            for trans in searchResults18CW as [NSManagedObject] 
                let result = trans.value(forKey: "cWeight")
                if result != nil 

                    CWeight.text = result! as? String
                
            
        
    catch 
        print("Error with request: \(error)")
    

然后保存。

   func getContext () -> NSManagedObjectContext 
    _ = UIApplication.shared.delegate as! AppDelegate
    return DataController().managedObjectContext



func storeTranscription18CW (pageText: Double, textFileUrlString: String) 


    let context = getContext()

    //retrieve the entity that we just created
    let entity =  NSEntityDescription.entity(forEntityName: "TextInputs", in: context)

    let transc = NSManagedObject(entity: entity!, insertInto: context)

    // set the entity values
    if indexPageSum == 18 
        transc.setValue(pageText, forKey: "cWeight")
    
    //save the object
    do 
        try context.save()
        print("saved!")
     catch let error as NSError  
        print("Could not save \(error), \(error.userInfo)")
     catch 

    

然后保存另一部分。

 if indexPageSum == 18 
                            let CWConvert = Double(CWeight.text!)
                            storeTranscription18CW(pageText: (CWConvert)!, textFileUrlString: "cWeight")

【问题讨论】:

【参考方案1】:

表达式:

result! as? String

基本上意味着“如果result 的类型为String,则返回它,否则返回nil”。这适用于存储在数据库中的Strings,但将nil 分配给CWeight.text 用于其他任何事情。

你想要类似下面的东西:

if let result = trans.value(forKey: "cWeight") 
    if let str = result as? String 
        CWeight.text = str
    
    else 
        CWeight.text = "\(result)"
    

这适用于最常见的数据类型。表达式"\(result)" 使用字符串插值将result 中存储的值转换为适当的字符串。

您可能还想研究生成NSManagedObject 子类以使其更易于处理。

【讨论】:

嗨,谢谢您的帮助,这适用于我要保存的第一个,但是当我将它们全部 (8) 更改为具有不同名称的相同内容时,它只会保存最后一个作为其余的数字,我认为它与这部分有关....如果 indexPageSum == 18 var CWConvert = Double(CWeight.text!) storeTranscription18CW(pageText: (CWConvert)!, textFileUrlString: "cWeight" ) CWConvert = Double(TWeight.text!) storeTranscription18TW(pageText: (CWConvert)!, textFileUrlString: "tWeight") 你能把完整的代码贴在可以访问的地方吗?还是私下分享?看来这里可能还有其他事情需要解决。

以上是关于从核心数据中获取 Double 返回到文本字段的主要内容,如果未能解决你的问题,请参考以下文章

将 managedobject 从 uitableview 传递到文本字段以在核心数据模型中进行编辑

从 SQL 获取数据并将其插入到 Java 文本字段中

从保存的查询中获取数据到报表上的文本框中

如何从具有多行的 SQL 查询中获取非字符串数组字段

如何检索文本字段文本并将其作为整数 32 存储在核心数据中?

从获取中排除属性/字段 - 核心数据