Swift 正在检索ManagedObjects的属性
需要使用Swift访问核心数据记录 理想情况下,我希望调用我的类“核心数据”,它返回ManagedObject或false(不存在任何对象)。但是,当前当我要检索ManagedObject上的属性时,我得到编译器错误[NSManagedObject]没有名为“valueForKey”的成员 我知道类似的问题(例如),但我无法解决。需要帮助:) 对于疑难解答,我尝试访问类中已经存在的属性(稍后将在类外部完成)。代码如下为什么会出现编译器错误以及如何修复它? 谢谢Swift 正在检索ManagedObjects的属性,swift,core-data,nsmanagedobject,Swift,Core Data,Nsmanagedobject,需要使用Swift访问核心数据记录 理想情况下,我希望调用我的类“核心数据”,它返回ManagedObject或false(不存在任何对象)。但是,当前当我要检索ManagedObject上的属性时,我得到编译器错误[NSManagedObject]没有名为“valueForKey”的成员 我知道类似的问题(例如),但我无法解决。需要帮助:) 对于疑难解答,我尝试访问类中已经存在的属性(稍后将在类外部完成)。代码如下为什么会出现编译器错误以及如何修复它? 谢谢 class CoreData{
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
}
}
}
类核心数据{
//获取现有数据(从核心数据)
func getData(实体:字符串)->AnyObject{
//集合委托
让appDelegate=
UIApplication.sharedApplication()
让managedContext=appDelegate.managedObjectContext!
//获取实体=表(筛选器)
let fetchRequest=NSFetchRequest(entityName:entity)
//创建错误变量
var错误:N错误?
//获得记录
让我们来看看结果=
managedContext.executeFetchRequest(fetchRequest,
错误:&错误)作为[NSManagedObject]?
如果let results=fetchedResults{
//检索到的数据
var temp=results.valueForKey(“性别”)作为字符串//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
版本您必须使用作为而不是作为!
)
或者,您可以使用.DictionaryResultType
创建一个获取请求,以仅获取一些选定的属性,
参见示例。Martin R-你就是那个人!现在阅读子类选项-看起来确实更好-谢谢你指出它!好奇者提出的关于字典方法的问题:如果你要求多属性和一个(或多个)属性不存在-提取会一起失败吗-或者带来确实存在的属性吗?再次感谢-让我开心一天-祝你周末愉快!@PederWessel:不客气!-如果propertiesToFetch
包含任何不是实体实际属性的属性,那么提取请求将失败。谢谢Martin。享受w伊肯德