无法将类型 'NSFetchRequest<NSFetchRequestResult>' 的值转换为指定类型 'NSFetchRequest<T>'
Cannot convert value of type 'NSFetchRequest<NSFetchRequestResult>' to specified type 'NSFetchRequest<T>'
我想使用 iOS10 中引入的新核心数据 API。
@available(iOS 10.0, *)
open class func fetchRequest() -> NSFetchRequest<NSFetchRequestResult>
我创建了通用函数来获取各种对象:
func getAllEntities<T: NSManagedObject>(ofType type: T.Type, success: @escaping ([T]) -> ()) throws -> [T] {
let fetchRequest: NSFetchRequest<T> = T.fetchRequest()
let asyncFetchRequest = NSAsynchronousFetchResult(fetchRequest: fetchRequest) { result in
success(result.finalResult ?? [])
}
try databaseStack.persistentContainer.viewContext.execute(asyncFetchRequest)
}
但是在 let fetchRequest: NSFetchRequest<T> = T.fetchRequest()
行我遇到了问题:
Cannot convert value of type 'NSFetchRequest<NSFetchRequestResult>'
to specified type 'NSFetchRequest<T>'
我做错了什么?
尝试其中之一。
一个:
我在我的项目中经历过类似的事情。
我发现核心数据实体的自动生成 headers 存在问题。尝试从以下位置删除:
/Users/**user**/Library/Developer/Xcode/DerivedData/**AppName**/Build/Intermediates/**AppName**/Debug-iphonesimulator/**AppName**.build/DerivedSources/CoreDataGenerated
然后用
command+shift+K
然后尝试构建。
两个:
尝试使用 let fetchRequest = NSFetchRequest<T>(entityName: NSStringFromClass(T.self))
Swifty 第二种方法的风格,100% 有效:
let fetchRequest = NSFetchRequest<T>(entityName: String(describing: T.self))
T.fetchRequest()
returns一个NSFetchRequest<NSFetchRequestResult>
,
您必须将其显式转换为特定的 NSFetchRequest<T>
:
let fetchRequest = T.fetchRequest() as! NSFetchRequest<T>
let asyncFetchRequest = NSAsynchronousFetchRequest(fetchRequest: fetchRequest) { result in
success(result.finalResult ?? [])
}
NSFetchRequest boilerplate
调用(例如,对于信息数组)以 ()
结束;不要忘记这一点,否则您可能会收到此类错误。
这很容易被遗漏,尤其是当您输入代码而不是 copy-pasting boiler-plate 代码时。
我想使用 iOS10 中引入的新核心数据 API。
@available(iOS 10.0, *)
open class func fetchRequest() -> NSFetchRequest<NSFetchRequestResult>
我创建了通用函数来获取各种对象:
func getAllEntities<T: NSManagedObject>(ofType type: T.Type, success: @escaping ([T]) -> ()) throws -> [T] {
let fetchRequest: NSFetchRequest<T> = T.fetchRequest()
let asyncFetchRequest = NSAsynchronousFetchResult(fetchRequest: fetchRequest) { result in
success(result.finalResult ?? [])
}
try databaseStack.persistentContainer.viewContext.execute(asyncFetchRequest)
}
但是在 let fetchRequest: NSFetchRequest<T> = T.fetchRequest()
行我遇到了问题:
Cannot convert value of type
'NSFetchRequest<NSFetchRequestResult>'
to specified type'NSFetchRequest<T>'
我做错了什么?
尝试其中之一。
一个: 我在我的项目中经历过类似的事情。
我发现核心数据实体的自动生成 headers 存在问题。尝试从以下位置删除:
/Users/**user**/Library/Developer/Xcode/DerivedData/**AppName**/Build/Intermediates/**AppName**/Debug-iphonesimulator/**AppName**.build/DerivedSources/CoreDataGenerated
然后用
command+shift+K
然后尝试构建。
两个:
尝试使用 let fetchRequest = NSFetchRequest<T>(entityName: NSStringFromClass(T.self))
Swifty 第二种方法的风格,100% 有效:
let fetchRequest = NSFetchRequest<T>(entityName: String(describing: T.self))
T.fetchRequest()
returns一个NSFetchRequest<NSFetchRequestResult>
,
您必须将其显式转换为特定的 NSFetchRequest<T>
:
let fetchRequest = T.fetchRequest() as! NSFetchRequest<T>
let asyncFetchRequest = NSAsynchronousFetchRequest(fetchRequest: fetchRequest) { result in
success(result.finalResult ?? [])
}
NSFetchRequest boilerplate
调用(例如,对于信息数组)以 ()
结束;不要忘记这一点,否则您可能会收到此类错误。
这很容易被遗漏,尤其是当您输入代码而不是 copy-pasting boiler-plate 代码时。