2016-09-30 35 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