4

In Swift 3 when we use NSFetchRequest, we have to specify NSFetchRequestResult. But how to get an array of properties values? If I use something like this

let fetchRequest = NSFetchRequest<MyClass>(entityName: "MyClass")
fetchRequest.propertiesToFetch = ["myAttributeName"]

an exception fires when I try to execute fetch request. error: -executeRequest: encountered exception = The database appears corrupt. If I remove a line with propertiesToFetch I don't get any errors, but I get an array of objects, not properties.

Valentin Shamardin
  • 3,569
  • 4
  • 34
  • 51

2 Answers2

4

I forgot to set resultType for NSFetchRequest.

let fetchRequest = NSFetchRequest<MyClass>(entityName: "MyClass")
fetchRequest.propertiesToFetch = ["myAttributeName"]
fetchRequest.resultType = .dictionaryResultType
Valentin Shamardin
  • 3,569
  • 4
  • 34
  • 51
2

Actually, you are better off in most cases using the array of objects rather than properties. Core Data will manage the optimal load balancing for round trips to the store for you. What you presumably worry about most (memory, performance, data access times) is really not warranted.

Also, this should result in cleaner, safer and more concise code.

Mundi
  • 79,884
  • 17
  • 117
  • 140
  • What about fetching unique properties only? Is it still better to use objects and then run a map, and set on them? Or is it better to fetch properties and set the fetch request to return distinct results? – Vladimir Jul 09 '22 at 15:41
  • 1
    I would use the latter method. Extracting unique values should be more efficient when done on the database level. – Mundi Jul 10 '22 at 19:15