Ios 无法使用类型为“(NSFetchRequest)的参数列表调用“fetch”

Ios 无法使用类型为“(NSFetchRequest)的参数列表调用“fetch”,ios,swift3,Ios,Swift3,我使用支持iOS 9.0+的Swift 3创建了一个帮助函数来加载NSManagedObjects class func loadContext(entityName: String, fetchConfiguration: ((NSFetchRequest<NSManagedObject>) -> Void)?) -> AnyObject? { let appDelegate = UIApplication.shared.delegate as! AppDele

我使用支持iOS 9.0+的Swift 3创建了一个帮助函数来加载NSManagedObjects

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
}
但是,我得到以下错误:

无法使用“NSFetchRequest”类型的参数列表调用“fetch”


我还尝试了几种变体,例如让dataFetchRequest=NSFetchRequestentityName:entityName,它们都遇到了相同的错误。

我的问题已经回答了这一点

XCode提供的错误消息不正确。正确的解决方法是正确地转换您的返回和方法

managedObjectContext.fetch返回[Any]。您需要进行三项更改

类func loadContextentityName:String,fetchConfiguration:NSFetchRequest->Void?->[NSManagedObject]?{ 让dataFetchRequest=NSFetchRequestentityName:entityName 返回try appDelegate.managedObjectContext.fetchdataFetchRequest作为?[NSManagedObject]
我已经向苹果公司提交了一份错误报告-

更改要简单得多,似乎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
}

我遇到了完全相同的问题。你找到解决方案了吗?Swift 3中不允许普通呼叫吗?