微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

core-data – 无法在Swift 3中使用泛型类型AnyObject实例化NSFetchedResultController

我正在使用 Swift 3中的CoreData进行实验,并在Xcode 8 beta中遇到了一个非常奇怪的循环编译器错误.

NSFetchedResultsController需要一个泛型类型参数,AnyObject到目前为止工作正常.编译器抛出错误

Type 'AnyObject' does not conform to protocol 'NSFetchRequestObject'

Screen shot

为了让我更加困惑,如果删除type参数,XCode会说:

Reference to generic type NSFetchedResultsController requires argument in `<...>`

并使用< AnyObject> ….帮助建议修复,循环重复.

这看起来非常像一个bug.我报告之前的任何想法?

解决方法

如果你看一下NSFetchedResultsController,你可以清楚地看到它有一个名为ResultType的参数,它符合NSFetchRequestResult.所以你应该传递一个符合NSFetchRequestResult的类型.

因此,如果您查看NSFetchRequestResult,您可以看到它符合NSObjectProtocol. NSDictionary,NSManagedobject和NSManagedobjectID也符合NSFetchRequestResult.

public protocol NSFetchRequestResult : NSObjectProtocol {
}

extension NSDictionary : NSFetchRequestResult {
}

extension NSManagedobject : NSFetchRequestResult {
}

extension NSManagedobjectID : NSFetchRequestResult {
}

所以很明显,你应该从这三个NSDictionary或NSManagedobject或NSManagedobjectID中的任何一个传递一个类型.

像这样创建你的NSFetchedResultsController实例.

let resultsController : NSFetchedResultsController<NSManagedobject>!

或者像这样

let resultsController : NSFetchedResultsController<NSManagedobjectID>!

或者像这样

let resultsController : NSFetchedResultsController<NSDictionary>!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐