【问题标题】:Core Data - Change NSManagedObject array into array of Strings using valueForKey -OSX核心数据 - 使用 valueForKey -OSX 将 NSManagedObject 数组更改为字符串数组
【发布时间】:2016-04-02 03:27:42
【问题描述】:

所以 iv 使用 NSTokenField 来允许数据输入,当用户开始输入时,TokenField 会建议事情。我希望它建议已经存在于核心数据中的内容。

为此,当单元格移动到超级视图时,我会调用此函数(这一切都发生在自定义表格视图单元格内)

var subjectInformation = [NSManagedObject]()

  let appDel = NSApplication.sharedApplication().delegate as! AppDelegate

    let context = appDel.managedObjectContext

    let fetchRequest = NSFetchRequest(entityName: "SubjectInformation")

    do {
        let results = try context.executeFetchRequest(fetchRequest)
        subjectInformation = results as! [NSManagedObject]
    } catch {

    }

这将返回一个 NSManagedObjects 数组,现在我希望为托管对象中的每个对象获取 valueForKey("subjectName") 并将其插入到字符串数组中,以便我可以在此令牌字段函数中返回它

func tokenField(tokenField: NSTokenField, completionsForSubstring substring: String, indexOfToken tokenIndex: Int, indexOfSelectedItem selectedIndex: UnsafeMutablePointer<Int>) -> [AnyObject]? {

return subjectInformation //this is where is should return an array eg; ["English","Maths","Science"]

我该怎么做?谢谢:)

【问题讨论】:

    标签: swift core-data nsarray nstokenfield


    【解决方案1】:

    如果您正确地对NSManagedObject 进行子类化,您可以使用富有表现力的 Swift 样式过滤器和映射。您可以将结果数组转换为 [SubjectInformation]

    let subjectList = subjectInformation.map { $0.subjectName }
    

    【讨论】:

      【解决方案2】:

      试试这个:

      (subjectInformation as! NSArray).valueForKeyPath("@unionOfObjects.subjectName")
      

      这应该返回一个包含所有subjectInformation 项的subjectNames 的数组。

      【讨论】:

      • 这给了我一个错误抱歉,我最终不得不创建一个数组,然后遍历所有 NSMutable 数组并将它们附加到数组中
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-04
      • 2019-10-10
      • 2021-08-26
      • 2016-02-09
      相关资源
      最近更新 更多