作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Xcode 和 CoreData 构建一个 iOS 应用程序。在数据模型中有一些实体,比方说:A、B、C、D、E。
在 homeViewController 中有五个按钮,每个按钮执行到每个实体的 detailTableViewController 的转场。
根据按下哪个按钮,您应该获取相应实体的信息。例如,如果我按下按钮“B”,我应该在 detailTableViewController 中获取“B”实体的数据。
问题来了:如果在按下按钮之前我不知道要推送哪个实体,我如何声明变量“entitiesArray”来存储获取请求结果?在按下按钮之前,我不知道它的数据类型。
如果只有一个实体“A”,我会写:
let entitiesArray = [A]()
let request: NSFetchRequest<A> = A.fetchRequest()
entitiesArray = try context.fetch(request)
...
但是,我不知道将被推送到哪个实体。
在 viewDidLoad 中使用 switch 语句并不能解决问题,因为我需要将 entitiesArray 作为全局变量才能在 numberOfRowsInSection 和 cellForRowAt indexPath 等其他函数中使用它。
最佳答案
通过扩展将其添加到您的上下文中:
func fetchMOs (_ entityName: String, sortBy: [NSSortDescriptor]? = nil, predicate: NSPredicate? = nil) throws -> [NSManagedObject] {
let request = NSFetchRequest<NSFetchRequestResult>(entityName: entityName)
request.returnsObjectsAsFaults = false //as I need to access value
request.predicate = predicate
request.sortDescriptors = sortBy
return try! self.fetch(request) as! [NSManagedObject]
}
然后你可以这样调用它:
let mos = context.fetchMOs(String(describing: yourClassofAorBorCorD))
重点是使用 NSFetchRequest 的便利 init(:entityName) 和结构 NSFetchRequestResultType 作为结果类型。
关于ios - 如何在不知道哪个实体的情况下在 swift 中声明一个数据类型为实体数组的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53126925/
我是一名优秀的程序员,十分优秀!