从获取请求中获取对象数组

时间:2016-10-11 17:22:57

标签: ios swift

我有一个名为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的第一行崩溃。

2 个答案:

答案 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)