Restkit和快速删除孤立对象3

问题描述:

最后一次更新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

误差基本上说,这是期待NSFetchRequestResult。它是例如NSAsynchronousFetchResult的结果。您正在使用请求。

+0

请您再解释一下吗? –

+0

使用'NSAsynchronousFetchResult'而不是'TipoMenu'。类型检查失败,我认为你的'TipoMenu'是'NSManagedObject'的一个子类。使用“NSFetchRequestResult”的任何子类。 –

嗯,事实证明,正确的代码是

 // 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给我带来了这个。