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 中搜索多个单词
如何使用两个 NSPredicates 获取请求 - Swift 2
我想要 swift3.0 的 NSPredicate 的数组过滤器数组
搜索栏在 swift 3 中不起作用。无法将类型 (_) -> Bool 的值转换为预期的参数类型 NSPredicate