Свойства коллекции NSManagedObject становятся нулевыми через некоторое время - PullRequest
0 голосов
/ 18 сентября 2018

Я работаю в подклассе NSViewController, где в viewDidLoad я получаю свои сущности из CoreData, как показано ниже:

let delegate = AppDelegate.init()
let context = delegate.persistentContainer.viewContext
let fetch = PicPathEntity.entityFetchRequest()

var tempEntities: [PicPathEntity] = []
context.performAndWait {
    tempEntities = try! fetch.execute()
}
entities = tempEntities

Затем во время функции itemForRepresentedObjectAt кажется, чтоколичество объектов такое же, но значения свойств стали nil / empty.

Я провел поиск и обнаружил похожие проблемы без четких ответов (по крайней мере, не для Swift)

Я не могу найти информацию о том, как правильно извлечь и сохранить данные в переменной моей сущности.

1 Ответ

0 голосов
/ 19 сентября 2018

Я понял, как решить эту проблему после прочтения того, как работают отношения между объектами и контекстом.

Оказалось, что все, что мне нужно, чтобы сделать эту работу, это сделать контекст в свойстве ViewControllerвместо локальной переменной viewDidLoad.

var entities: [PicPathEntity] = []
var context: NSManagedObjectContext!

override func viewDidLoad() {
    super.viewDidLoad()

    let delegate = AppDelegate.init()
    context = delegate.persistentContainer.viewContext
    let fetch = PicPathEntity.entityFetchRequest()
    context.performAndWait {
        entities = try! fetch.execute()
    }
}

Из-за полезных комментариев к этому ответу я теперь обновил код до:

var entities: [PicPathEntity] = []
var context: NSManagedObjectContext!

override func viewDidLoad() {
    super.viewDidLoad()

    let delegate = NSApplication.shared.delegate as! AppDelegate
    context = delegate.persistentContainer.viewContext
    let fetch = PicPathEntity.entityFetchRequest()
    context.perform {
        self.entities = try! fetch.execute()
        self.picFinderEntityCollectionView.reloadData()
    }

    configureCollectionView()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...