无法使用类型为“(NSFetchRequest<NSFetchRequestResult>)”的参数列表调用“获取”
Posted
技术标签:
【中文标题】无法使用类型为“(NSFetchRequest<NSFetchRequestResult>)”的参数列表调用“获取”【英文标题】:Cannot invoke 'fetch' with an argument list of type '(NSFetchRequest<NSFetchRequestResult>)' 【发布时间】:2016-09-22 22:56:19 【问题描述】:我创建了一个辅助函数来使用支持 ios 9.0+ 的 Swift 3 加载 NSManagedObject
s。
class func loadContext(entityName: String, fetchConfiguration: ((NSFetchRequest<NSManagedObject>) -> Void)?) -> AnyObject?
let appDelegate = UIApplication.shared.delegate as! AppDelegate
// Fetch requested data
let dataFetchRequest = NSFetchRequest<NSManagedObject>(entityName: entityName)
// Configure the fetch request with user parameters
if fetchConfiguration != nil
fetchConfiguration!(dataFetchRequest)
do
return try appDelegate.managedObjectContext.fetch(dataFetchRequest as! NSFetchRequest<NSFetchRequestResult>)
catch
print("Failed to fetch feed data, critical error: \(error)")
return nil
但是我收到以下错误:
Cannot invoke 'fetch' with an argument list of type '(NSFetchRequest<NSFetchRequestResult>)'
我也尝试了几种变体,例如let dataFetchRequest = NSFetchRequest<NSFechRequestResult>(entityName: entityName)
,它们都遇到了相同的错误。
【问题讨论】:
我遇到了完全相同的问题。你有没有找到解决办法? Swift 3 中不允许通用调用吗? 【参考方案1】:我的问题Swift 3/XCode 8 NSManagedObjectContext.fetch error已经回答了这个问题。
XCode 提供的错误消息不正确。正确的解决方法是正确地投射你的回报和你的方法。
managedObjectContext.fetch()
返回[Any]
。您需要进行三项更改。
class func loadContext(entityName: String, fetchConfiguration: ((NSFetchRequest<NSManagedObject>) -> Void)?) -> [NSManagedObject]?
let dataFetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: entityName)
return try appDelegate.managedObjectContext.fetch(dataFetchRequest) as? [NSManagedObject]
我已向 Apple 提交错误报告 - https://openradar.appspot.com/radar?id=5049582866137088
【讨论】:
【参考方案2】:更改要简单得多,似乎 xcode 在将代码从 swift-2 转换为 3.0 时错误地推断出“AnyObject”类型。
作为参考,这是@dmorrow 解决方案中的固定功能。
class func loadContext(entityName: String, fetchConfiguration: ((NSFetchRequest<NSManagedObject>) -> Void)?) -> [NSManagedObject]?
let appDelegate = UIApplication.shared.delegate as! AppDelegate
// Fetch requested data
let dataFetchRequest = NSFetchRequest<NSManagedObject>(entityName: entityName)
// Configure the fetch request with user parameters
fetchConfiguration?(dataFetchRequest)
do
return try appDelegate.managedObjectContext.fetch(dataFetchRequest)
catch
print("Failed to fetch feed data, critical error: \(error)")
return nil
【讨论】:
以上是关于无法使用类型为“(NSFetchRequest<NSFetchRequestResult>)”的参数列表调用“获取”的主要内容,如果未能解决你的问题,请参考以下文章
无法使用类型为“()”的参数列表为类型“Int”调用初始化程序