Swift 3 NSPredicate 关系请求返回空数组

Posted

技术标签:

【中文标题】Swift 3 NSPredicate 关系请求返回空数组【英文标题】:Swift 3 NSPredicate relationship request returns empty array 【发布时间】:2016-09-30 09:54:00 【问题描述】:

我现在有一个大问题。我刚刚将我的应用程序更新到 Swift 3,在 *** 的帮助下,到目前为止,我的一切都运行得很顺利,除了我尝试访问关系的谓词。

这是我的旧请求,适用于 Swift 2.3

if let myStation = station 
        context.performAndWait 
            let request = ProcessDetail.fetchRequest() as! NSFetchRequest<ProcessDetail>
            // DOESNT WORK ANYMORE !!!!! NEW SWIFT
            request.predicate = NSPredicate(format: "process.station_ID = %@", myStation.station_ID! )

            do 
                let processDetails = try context.fetch(request)
                for processDetail in processDetails 
                    ansProcessDetails += 1
                    if processDetail.processdetail_checked == "yes" 
                        ansMasteredProcessDetails += 1
                     else 
                        ansNotMasteredProcessDetails += 1
                    
                
             catch let error 
                print(error)
            
        

但是现在 processDetails 的数组是空的。有什么建议吗?

这是重要的代码行:

request.predicate = NSPredicate(format: "process.station_ID = %@", myStation.station_ID! )

谢谢本

【问题讨论】:

station_ID 是什么类型? 尝试一次request.predicate = NSPredicate(format: "%K.%K = %@", "process","station_ID", myStation.station_ID! ) @OlegGordiichuk station_ID 是 Sting 类型 @NiravD 不错的尝试,但不幸的是没有用:/ 也可以试试request.predicate = NSPredicate(format: "%K.%K = '%@'", "process","station_ID", myStation.station_ID! ) 【参考方案1】:

在 Swift 3 中,它从不完全根据这个线程进行隐式桥接转换:https://github.com/apple/swift-evolution/blob/master/proposals/0072-eliminate-implicit-bridging-conversions.md

也许,station_ID 是 String 类型? 所以你可以试试这个:

request.predicate = NSPredicate(format: "process.station_ID = %@", myStation.station_ID as! NSString)

如果它解决了您的问题,请告诉我 真诚的

【讨论】:

感谢您的文章将给它看看。尝试将强制转换为 NSString 但没有用。问题是,即使我尝试类似'request.predicate = NSPredicate(format: "process.station = %@", myStation.station)' 总是对我有用的东西,我也会得到一个空数组。 谢谢,希望对您的问题有所帮助。 如果我能查看你的代码并在本地修复就好了。通过调试,我可以找到问题所在。 嘿,非常感谢您的提议。不幸的是,我不允许上传代码,因为它是一个公司的项目。我刚才确实找到了解决方案。其实我有点惭愧。我的数据库有一个错误,搞砸了所有的关系。再次感谢您的帮助 很高兴听到您解决了这个问题。这就是我要求调试您的实际代码库的原因。如果您认为我对您有所帮助,希望得到您的投票 :) 这是我在这里的第一次体验!【参考方案2】:

你可以试试这个,在 swift 3 中使用它进行搜索,它在 swift 2.3 和 swift 3 中都有效。它返回正确的数组。

/*

NSPredicate(format: "process.station_ID CONTAINS[c] %@",myStation.station_ID)

*/

如果它解决了您的问题,请告诉我。

感谢曼迪普·辛格

【讨论】:

嗯无法让它工作。非常令人沮丧,因为一切都在 swift 2.3 中完美运行。但也许其他东西坏了,我正在寻找错误位置的错误。无论如何感谢您的帮助

以上是关于Swift 3 NSPredicate 关系请求返回空数组的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSPredicate 在单个搜索 iOS swift 中搜索多个单词

swift 3 迁移后 NSPredicate 崩溃

如何使用两个 NSPredicates 获取请求 - Swift 2

我想要 swift3.0 的 NSPredicate 的数组过滤器数组

搜索栏在 swift 3 中不起作用。无法将类型 (_) -> Bool 的值转换为预期的参数类型 NSPredicate

具有多对多关系的 NSPredicate