使用NSManagedObject子类中的字符串设置TextField的文本时出现问题

时间:2016-08-05 14:46:58

标签: ios swift xcode core-data

描述

我确信在这里我的思路完全错了,但要纠正我。我只是尝试引用我保存在我的一个对象子类中的字符串。我这样做只是尝试将textField的文本设置为我保存的字符串(单击按钮)。

代码

下面你会找到我的“CrawlerOne + CoreDataProperties.swift”文件的代码

import Foundation
import CoreData

extension CrawlerOne {

@nonobjc class func fetchRequest() -> NSFetchRequest<CrawlerOne> {
    return NSFetchRequest<CrawlerOne>(entityName: "CrawlerOne");
}

@NSManaged var crawlerAbrasion: String?
@NSManaged var crawlerDistance: String?

}

这是我真正猜测的部分。此代码是“生成”按钮,它试图将textField设置为保存的字符串

@IBAction func generate(_ sender: AnyObject) {
    let appDel:AppDelegate = (UIApplication.shared().delegate as! AppDelegate)
    let context:NSManagedObjectContext = appDel.managedObjectContext
    let entity1 = NSEntityDescription.insertNewObject(forEntityName:"CrawlerOne", into:context) as NSManagedObject as! CrawlerOne
    answer.text = entity1.crawlerAbrasion
}

最后,这是我最初保存String的代码。请注意,这两个函数属于不同的类别&amp;文件

@IBAction func save(_ sender: AnyObject) {
    let appDel:AppDelegate = (UIApplication.shared().delegate as! AppDelegate)
    let context:NSManagedObjectContext = appDel.managedObjectContext
    let entity1 = NSEntityDescription.insertNewObject(forEntityName: "CrawlerOne", into:context) as NSManagedObject as! CrawlerOne
    entity1.crawlerDistance = distance.text

}

结论

同样,我绝对相信我的思路在这里非常合适,但这是我受到压力很快完成的事情。此外,在调试控制台中完全没有与此相关的错误/消息。我只需单击按钮即可向此Textfield添加文本,但没有任何反应。先感谢您! :)

1 个答案:

答案 0 :(得分:1)

少数事情:

  • 持有String的属性在generate和save方法中不相同
  • 如果CrawlerOne已经是NSManagedObject,则不确定是否需要强制转换为NSManagedObject
  • 您正尝试通过在托管上下文中插入新对象来尝试获取字符串,使用该操作的结果,从而将标签设置为nil的文本。您需要使用适当的NSPredicates创建NSFetchRequest以从NSManagedContext中获取原始对象。您实际上已经在CrawlerOne扩展中定义了一个:

class func fetchRequest() -> NSFetchRequest<CrawlerOne>

现在您需要对其进行配置以获取您要查找的字符串。如上所述,请使用NSPredicate。有很多例子说明如何做到这一点,例如: here