gpt4 book ai didi

ios - 从不同核心数据实体获取数据并将结果转换为相应类的通用方法

转载 作者:搜寻专家 更新时间:2023-11-01 06:04:48 25 4
gpt4 key购买 nike

我正在编写一个通用方法,使用给定的 entityNamepredicatesortDescriptors 从核心数据实体中获取数据。我想将结果作为请求实体的数组返回。如果我将 Student 作为 entityName,我需要返回一个 Students 数组,如下所示,

do {
if let results = try CoreDataController.sharedInstance.masterManagedObjectContext.fetch(request) as? [Student] {

if results.count > 0 {

return results
}
}
}

这里的问题是,如何在使用给定实体名称的泛型方法中将结果转换为相应实体类的数组?

我尝试从实体名称生成类,

let coreDataClass = NSClassFromString(entityName) as! NSManagedObject.Type

但它没有被数组声明(在上面代码中的 Student 位置)。请帮助我找到正确的方法。

提前致谢!

最佳答案

您可以将 Swift 泛型用于完全相同的场景。

考虑以下 Swift(版本 3.0.1)代码,用于获取对象数组,其中谓词和排序描述符作为参数提供(您可以在 coredata 帮助程序类中将此函数定义为类方法):

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
}
}

希望对您有所帮助。

关于ios - 从不同核心数据实体获取数据并将结果转换为相应类的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40420512/

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