NSCompoundPredicate 的 NSPredicate 数组

Posted

技术标签:

【中文标题】NSCompoundPredicate 的 NSPredicate 数组【英文标题】:NSPredicate array for NSCompoundPredicate 【发布时间】:2016-08-09 18:59:58 【问题描述】:

请帮助我,我想在 Swift 2.2 NSPredicate 数组中为 NSCompoundPredicate 创建一个 coredata 获取函数

public func loadData(entityName: String, filters: [String: String] = [:], dataFault: Bool = true) -> [NSManagedObject] 
    var listItems: [NSManagedObject]?
    let delegate = UIApplication.sharedApplication().delegate as? AppDelegate

    if let context = delegate?.managedObjectContext 
        let fetchRequist = NSFetchRequest(entityName: entityName)
        if (filters.count > 0) 
            var predicte: [NSPredicate]
            for (key, value) in filters 
                let p1:NSPredicate = NSPredicate(format: "%K == %@", key, value as NSObject)
                predicte.appendContentsOf(p1)
            
            fetchRequist.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: predicte)
        
        fetchRequist.returnsObjectsAsFaults = dataFault
        do
            let results = try context.executeFetchRequest(fetchRequist)
            listItems = results as? [NSManagedObject]
        
        catch let err 
            print(err)
        

    
    else
        print("context Error")
    
    return listItems!


predicte.appendContentsOf(p1) 显示错误

【问题讨论】:

提供错误的详细信息以及您预计会发生什么 【参考方案1】:

在您的代码中,p1 不是 CollectionType,因此您需要使用 append,而不是 appendContentsOf

                predicte.append(p1)

另外,您需要适当地初始化您的predicte

            var predicte: [NSPredicate] = []

【讨论】:

谢谢,它的工作。请告诉我这是不是编码的好方法 @AyonSaha,对不起,但我不确定我使用 Core Data 的方式是否是一种好方法。我从网络资源中学到了很多东西,包括 Stack Overflow 的经典线程。密切关注他们。 我不是在谈论你的解决方案,我是在谈论我的总体功能和我的编码方式,或者我是否正确 @AyonSaha,我的意思是,如果我知道什么是好的,我可以改进我的应用程序并说我的好。 好的,再次感谢您的解决方案

以上是关于NSCompoundPredicate 的 NSPredicate 数组的主要内容,如果未能解决你的问题,请参考以下文章

在 swift 3 中创建复杂的 NSCompoundPredicate

NSCompoundPredicate 混合 AND 和 OR

Xcode 6.1 中的 NSCompoundPredicate 错误

NSCompoundPredicate

NSCompoundPredicate 和 Cloudkit

将 NSCompoundPredicate 与列表一起使用