executeFetchRequest не возвращает подкласс NSManagedObject

Это для XCode 6 и Swift...

Я пытаюсь сделать запрос на выборку к контексту управляемого объекта, но он не возвращает правильный подкласс.

Я уже установил подкласс в конфигурации моделировщика данных модели данных на имя моего пользовательского подкласса, а в коде он расширяет класс NSManagedObject.

Есть идеи?

3 ответа

Решение

Просто разобрался с решением.

Я должен был добавить @objc атрибут, позволяющий классу быть совместимым с Objective-C.

Теперь запрос на выборку возвращает правильный результат Tasks[]

import Foundation
import CoreData

@objc(Task) // make compatible with objective-c
class Task : NSManagedObject
{
    @NSManaged var note: String!
    @NSManaged var completed: Bool
}

Ссылка: https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithObjective-CAPIs.html

С помощью @objc(Task) кажется, работает, но вы также можете просто отредактировать конфигурацию модели данных модели данных на имя ToDoList.Task вместо просто Task, Это тоже сработает и позволит избежать конфликтов классов, если Task используется где-либо еще в коде Objective-C.

Убедитесь, что в инспекторе "Entity" (в правой части экрана, на панели "Утилиты") выбрано "Задача" в вашей модели, чтобы поле "Класс" было правильно заполнено "Задачей" (по умолчанию оно пустое).

Другие вопросы по тегам