我有一个名为Projects的对象,我保存到核心数据。然后,我将多个项目添加到核心数据。我想从核心数据中检索这些对象作为数组。以下代码出现此错误:
- [NSAsynchronousFetchResult mutableCopyWithZone:]:无法识别的选择器发送到实例
var uploadPhotos : NSMutableArray? = []
var activeProject : String!
override func viewDidLoad() {
super.viewDidLoad()
projectPicker.dataSource = self
projectPicker.delegate = self
isInSegmentPhoto = true
//let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Project")
let fetchRequest: NSFetchRequest<NSFetchRequestResult> = Project.fetchRequest()
let entityDescription = NSEntityDescription.entity(forEntityName: "Project", in: sharedDelegate.managedObjectContext)
fetchRequest.entity = entityDescription
do {
let result = try self.sharedDelegate.managedObjectContext.execute(fetchRequest)
print(result)
projects = result.mutableCopy() as! [Project]
} catch {
let fetchError = error as NSError
print(fetchError)
}
}
当我运行该程序时,它打印出项目列表,但在do-catch的第一行崩溃。
答案 0 :(得分:1)
请使用Swift原生类型,NSMutableArray
没有类型信息。
var projects = [Project]()
...
projects = try defaultManagedObjectContext().fetch(fetchRequest) as! [Project]
由于获取请求显然是Project
请求,因此您可以安全地解包结果。
mutableCopy()
会导致错误,因为NSFetchRequestResult
(所有可能的结果类型的伞形协议)都不响应该方法。
答案 1 :(得分:0)
想出来!我使用的是错误的方法。用fetch替换execute。
self.sharedDelegate.managedObjectContext.fetch(fetchRequest)