我正在尝试为 NSPredicate 编写一个 SUBQUERY。我的问题是我手头没有 SUBQUERY 的谓词部分的查询。有没有办法在 SUBQUERY 中嵌套 NSPredicate?
例如,这是我尝试过的:
let ordersPredicate = NSPredicate()//some predicate passed in
//how do I use the ordersPredicate inside the subquery??
let subQueryPredicate = NSPredicate(format: "SUBQUERY(orders, $x,'%@').@count > 0", ordersPredicate.predicateFormat)
Run Code Online (Sandbox Code Playgroud)
更新:我现在不得不通过执行第一个谓词并执行 ANY IN 查询来做一个肮脏的解决方法。它的跛脚:(因为我正在其他地方以及稍后在管道中执行 ordersPredicate ..
let fetchRequest = NSFetchRequest()//blah
fetchRequest.predicate = orderPredicate
let orders = //execute fetch
let subQueryPredicate = NSPredicate(format: "SUBQUERY(orders, $x, ANY $x in %@).@count > 0", orders)
Run Code Online (Sandbox Code Playgroud) 我在Swift中有一个类,它包装了多个NSFetchedResultsControllers,成为它们的委托,并在返回到其自己的委托之前转换IndexPath。此类可以使NSFetchedResultsControllers返回不同的实体,只要它们符合相同的协议即可。升级到Swift 3时,我无法编译相同的功能。
假设我想包装两个NSFetchedResultsControllers,它们返回两种不同的Entity类型以显示在单个tableView中。两个CoreData实体均符合以下协议
protocol ManagedObjectDisplayType : NSFetchRequestResult {
var id:String { get }
func friendlyName() -> String
}
Run Code Online (Sandbox Code Playgroud)
问题在于,现在NSFetchedResultsControllers是通用的,没有可传递给Wrapper类的NSFetchedResultsController具体类型,因为这两个控制器的类型不同。
例如:
let entity1Request = NSFetchRequest<Entity1>(entityName: entityName)
let entity1Frc = NSFetchedResultsController<ManagedObjectDisplayType>(fetchRequest: entity1Request, managedObjectContext:mainManagedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
let entity2Request = NSFetchRequest<Entity2>(entityName: entityName)
let entity2Frc = NSFetchedResultsController<ManagedObjectDisplayType>(fetchRequest: entity2Request, managedObjectContext:mainManagedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
Run Code Online (Sandbox Code Playgroud)
当我这样做时,出现以下错误:“不支持将'ManagedObjectDisplayType'作为符合协议'NSFetchRequestResult'的具体类型使用”,这是很有意义的。
但是我不确定要做什么。