2016-09-30 30 views
0

我现在有一个大问题。我刚刚更新我的应用程序到Swift 3和帮助的Stackoverflow我得到一切运行平稳到目前为止,除了我尝试访问关系的谓词。Swift 3 NSPredicate关系请求返回空数组

这是我这工作就好了雨燕与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!) 

由于本

+0

什么类型是station_ID? –

+0

尝试一次'request.predicate = NSPredicate(格式:“%K.%K =%@”,“process”,“station_ID”,myStation.station_ID!)' –

+0

@OlegGordiichuk station_ID类型为Sting – benhofmann

回答

0

在斯威夫特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) 

让我知道,如果它固定您的问题 真诚

+0

谢谢你的表演会给它看一看。 尝试将该模型作为NSString使用,但无效。 的问题是,即使我尝试类似的东西 “request.predicate = NSPredicate(格式为:‘process.station =%@’,myStation.station)” 它总是为我工作,我得到一个空数组回。 – benhofmann

+0

谢谢,我希望它能帮助你解决问题。 – softninja

+0

如果我可以查看您的代码并在本地修复,那将很不错。通过调试,我可以找到问题。 – softninja

0

你可以试试这个,我在SWIFT 3使用这个搜索,它工作在两个SWIFT 2.3并迅速3.它返回适当的数组。

/*

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

*/

让我知道,如果它固定您的问题。

感谢Mandeep Singh

+0

嗯不能得到它的工作。非常令人沮丧,因为所有的东西在2.3版本中都完美运行。但也许其他人破产了,我正在错误的位置寻找错误。无论如何,感谢您的帮助 – benhofmann