Anu*_*yal 1 casting core-data nsmanagedobject ios swift
我正在写一个通用的方法与给定的从核心数据实体获取数据entityName,predicate和sortDescriptors。我想将结果作为请求实体的数组返回。如果我给Student作为entityName,则需要返回如下所示的学生数组,
do {
if let results = try CoreDataController.sharedInstance.masterManagedObjectContext.fetch(request) as? [Student] {
if results.count > 0 {
return results
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是,在使用给定实体名称的通用方法中,如何将结果转换为相应实体类的数组?
我试图从实体名称生成类,
let coreDataClass = NSClassFromString(entityName) as! NSManagedObject.Type
Run Code Online (Sandbox Code Playgroud)
但这不在数组声明中(在以上代码中的Student中)。请帮助我找到正确的方法。
提前致谢!
您可以将Swift Generics用于完全相同的场景。
考虑下面的Swift(版本3.0.1)代码,该代码用于获取带有谓词和排序描述符作为参数的对象数组(您可以在coredata helper类中将该函数定义为类方法):
class func arrayOf<T: NSManagedObject>(_ entity: T.Type,
predicate: NSPredicate? = nil,
sortDescriptor: [NSSortDescriptor]? = nil,
context: NSManagedObjectContext = CoreDataHelper.shared.context()) -> NSMutableArray? {
let fetchRequest = NSFetchRequest<T>(entityName: NSStringFromClass(T.self))
if predicate != nil {
fetchRequest.predicate = predicate!
}
if sortDescriptor != nil {
fetchRequest.sortDescriptors = sortDescriptor!
}
fetchRequest.returnsObjectsAsFaults = false
do {
let searchResult = try context.fetch(fetchRequest)
if searchResult.count > 0 {
// returns mutable copy of result array
return NSMutableArray.init(array: searchResult)
} else {
// returns nil in case no object found
return nil
}
} catch {
print(error.localizedDescription)
return nil
}
}
Run Code Online (Sandbox Code Playgroud)
希望能有所帮助。
| 归档时间: |
|
| 查看次数: |
766 次 |
| 最近记录: |