2016-09-24 74 views
1

最後一次更新XCode後,它建議我將代碼更新爲swift 3語言。 XCode幫助我進行了更新,在我修復了一些需要手動更新的內容之後,我遇到了一個轉換,我無法弄清楚該怎麼做。Restkit和快速刪除孤立對象3

這是關於刪除Restkit中的孤立對象。下面是雨燕2至SWIFT 3更新的生成的代碼通過的XCode:更新代碼

/Users/mast/work/gColegios/iOSapp/gColegios/AppDelegate.swift:417:34: Cannot convert value of type '(URL!) -> <<error type>>' to expected argument type '((URL?) -> NSFetchRequest<NSFetchRequestResult>?)!' 

所以我有

 // fetchRequestBlock to delete orphaned objects ------ tmenus -------- 
    manager?.addFetchRequest { (url:URL!) -> NSFetchRequest<AnyObject>! in 
     let pathMatcher = RKPathMatcher(pattern: config.getDataPath) 
     let match = pathMatcher.matchesPath(url.relativePath, tokenizeQueryStrings: false, parsedArguments: nil) 
     guard match else { 
      return nil 
     } 
     let fetchRequest = NSFetchRequest(entityName: "TipoMenuEntity") 
     return fetchRequest 
    } 

而且錯誤它顯示快速管理請求的新方法3:

// fetchRequestBlock to delete orphaned objects ------ tmenus -------- 
    manager?.addFetchRequest { (url:URL!) -> NSFetchRequest<TipoMenu>! in 
     let pathMatcher = RKPathMatcher(pattern: config.getDataPath) 
     let match = pathMatcher.matchesPath(url.relativePath, tokenizeQueryStrings: false, parsedArguments: nil) 
     guard match else { 
      return nil 
     } 
     let fetchRequest: NSFetchRequest<TipoMenu> = TipoMenu.fetchRequest() 
     return fetchRequest 
    } 

現在它顯示了新的錯誤

/Users/mast/work/gColegios/iOSapp/gColegios/AppDelegate.swift:418:34: Cannot convert value of type '(URL!) -> NSFetchRequest<TipoMenu>!' to expected argument type '((URL?) -> NSFetchRequest<NSFetchRequestResult>?)!' 

我已經嘗試了一切: '!(!URL) - > NSFetchRequest' 改變'((URL?) - > NSFetchRequest?)!' ,以及各種組合之間?和!

任何人都可以幫我解決這個問題嗎?

在此先感謝

+0

參數和返回值都應該是可選的 – Wain

回答

0

誤差基本上說,這是期待NSFetchRequestResult。它是例如NSAsynchronousFetchResult的結果。您正在使用請求。

+0

請您再解釋一下嗎? –

+0

使用'NSAsynchronousFetchResult'而不是'TipoMenu'。類型檢查失敗,我認爲你的'TipoMenu'是'NSManagedObject'的一個子類。使用「NSFetchRequestResult」的任何子類。 –

1

嗯,事實證明,正確的代碼是

 // fetchRequestBlock to delete orphaned objects ------ tmenus -------- 
    manager?.addFetchRequest { (url:URL?) -> NSFetchRequest<NSFetchRequestResult>? in 
     let pathMatcher = RKPathMatcher(pattern: config.getDataPath) 
     if let match = pathMatcher?.matchesPath(url?.relativePath, tokenizeQueryStrings: false, parsedArguments: nil) 
     { 
      if (match) 
      { 
       let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "TipoMenuEntity") 
       return fetchRequest 
      } 
     } 
     return nil 
    } 

什麼讓我感到困惑的是,在其他的要求,有必要把NSFetchRequest的請求被創建,因爲顯然與SWIFT 3 NSManagedObject類擴展了代碼以符合NSFetchRequest的委託。

但是,這裏只是XCode完成的一個函數的頭文件,以適應swift 3.因此,它只是放置正確的頭文件並使代碼適應該版本的新選項。

感謝New16給我帶來了這個。