无法在Swift 3中实例化具有泛型类型AnyObject的NSFetchedResultController
我在Swift 3中试验CoreData,并且遇到了Xcode 8 beta中非常奇怪的循环编译器错误。无法在Swift 3中实例化具有泛型类型AnyObject的NSFetchedResultController
NSFetchedResultsController需要一个泛型类型参数,并且AnyObject至今工作良好。编译器会引发错误:
Type 'AnyObject' does not conform to protocol 'NSFetchRequestObject'
为了让我加困惑,如果你删除类型参数时,Xcode接着说:
Reference to generic type NSFetchedResultsController requires argument in `<...>`
和有益建议使用<AnyObject>
修复。 ...和循环重复。
这看起来非常像一个错误。我报告之前的任何想法?
如果你看看NSFetchedResultsController
,你可以清楚地看到它有一个名称为ResultType
的参数,它符合NSFetchRequestResult
。所以你应该通过符合NSFetchRequestResult
的type
。
所以,如果你看看NSFetchRequestResult
,你可以看到它符合NSObjectProtocol
。另外NSDictionary
,NSManagedObject
和NSManagedObjectID
符合NSFetchRequestResult
。
public protocol NSFetchRequestResult : NSObjectProtocol {
}
extension NSDictionary : NSFetchRequestResult {
}
extension NSManagedObject : NSFetchRequestResult {
}
extension NSManagedObjectID : NSFetchRequestResult {
}
那么清楚,你应该通过从上述三种NSDictionary
或NSManagedObject
或NSManagedObjectID
的type
。
像这样创建您的NSFetchedResultsController
的实例。
let resultsController : NSFetchedResultsController<NSManagedObject>!
或类似这样的
let resultsController : NSFetchedResultsController<NSManagedObjectID>!
或类似这样的
let resultsController : NSFetchedResultsController<NSDictionary>!
你说的很对 - 我原来的(Swift 2)代码没有输入parameterise NSFetchedResultController。类型参数是由一个自动化的Swift 3重构添加的,它似乎是一个需求,因为试图创建这个类而没有类型参数被Xcode 8编译器拒绝。我怀疑我的问题并不那么清楚,尽管它没有真正解决问题,但我仍然接受。任何其他想法? – rustproofFish
用'''NSManagedObject''替换'''AnyObject'',这就是你所要做的。忘掉所有其他的东西。 –
在核心数据模型映射在你的代码生成的NSManagedObject的子类的任何实体,所以他们都可以使用要替换AnyObject,它们都会间接遵循NSFetchRequestResult协议。您应该看到哪个实体/类正在通过连接到此FetchedResultsController的FetchRequest获取,这就是您应该在那里使用的类型。
你想从DataProviderDelegate继承这个类吗? – Dershowitz123
除非确实需要,否则绝不要在图像中添加图像。只需分享代码。 –