gpt4 book ai didi

swift - 检索 ManagedObjects 的属性

转载 作者:行者123 更新时间:2023-11-28 05:29:18 24 4
gpt4 key购买 nike

需要使用 Swift 访问 Core Data 记录。

理想情况下,我想调用我的类“核心数据”,它返回 ManagedObject 或 false(不存在对象)。但是目前,当我想检索 ManagedObject 上的属性时,出现编译器错误 [NSManagedObject] does not have a member named 'valueForKey'

我知道类似的问题(例如 swift optional chaining with cast ),但我无法解决这个问题。需要帮助:)

为了排除故障,我正在尝试访问类中已有的属性(稍后将在类外完成)。下面的代码。 为什么我会收到编译器错误以及如何修复它?

谢谢!

class CoreData{

// Fetch existing data (from Core Data)
func getData(entity: String) -> AnyObject {

// Set delegate
let appDelegate =
UIApplication.sharedApplication().delegate as AppDelegate

let managedContext = appDelegate.managedObjectContext!

// Get entity = a table (filter)
let fetchRequest = NSFetchRequest(entityName:entity)

// Create error variable
var error: NSError?

// Get record
let fetchedResults =
managedContext.executeFetchRequest(fetchRequest,
error: &error) as [NSManagedObject]?

if let results = fetchedResults {
// Data retrieved
var temp = results.valueForKey("gender") as String // <-- ERROR
println(temp)
return results
} else {
// Could not obtain data - log it
println("Could not fetch \(error), \(error!.userInfo)")
return false
}
}
}

最佳答案

NSArray 有一个 valueForKey 方法,但 Swift 数组没有。您有以下选择:

  • 将 Swift 数组转换为 NSArray:

    var temp = (results as NSArray).valueForKey("gender") as! String 
  • 对 Swift 数组使用 map() 并对每个对象使用 valueForKey:

    var temp = map(results) { $0.valueForKey("gender") as! String }
  • (推荐) 让 Xcode 为您的实体创建 NSManagedObject 子类,并将 map() 与属性访问器一起使用:

    var temp = map(results) { $0.gender }

(上面的示例代码是针对当前的Xcode 6.3/Swift 1.2,在之前版本你必须使用 as 而不是 as!。)

或者,您可以使用 .DictionaryResultType 创建一个获取请求以仅获取一些选定的属性,见Fetching selected attribute in entities举个例子。

关于swift - 检索 ManagedObjects 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29565356/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com