我现在有一个大问题。我刚刚将我的应用程序更新为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
答案 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