Harry Harry - 1 month ago 10
Swift Question

Obtaining an array of objects from fetch request

I have an object called Projects that I save to core data. I then add multiple projects to core data. I want to retrieve those objects as an array from core data. The following code gets this error:


-[NSAsynchronousFetchResult mutableCopyWithZone:]: unrecognized selector sent to instance


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.fetch(fetchRequest)
print(result)

projects = result as! [Project]



} catch {
let fetchError = error as NSError
print(fetchError)
}


}


When I run the program it prints out the list of projects, but crashes on the first line of the do-catch.

Answer

Please, please use Swift native types, NSMutableArray has no type information.

var projects = [Project]()
...
projects = try defaultManagedObjectContext().execute(fetchRequest) as! [Project]

Since the fetch request is clearly a Project request you can safely unwrap the result.

mutableCopy() causes the error, because NSFetchRequestResult(the umbrella protocol of all possible result types) does not respond to that method.

Comments