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

时间:2016-09-30 09:54:01

标签: ios swift nspredicate swift3 nsfetchrequest

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

这是我的旧请求,适用于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! )

谢谢Ben

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

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

/ *

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

* /

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

感谢Mandeep Singh