В моем приложении я использую два вида таблиц, привязанных к каждому из них: NSArrayController
, а контроллеры массива настроены на использование объектов Core Data. Когда генерируются данные, создается NSObject
и значения хранятся в нем с obj.setValue(_:forKey:)
. После этого объект просто добавляется к контроллеру массива с ac.addObject()
.Mac OSX - Основные данные не сохраняются
Должно ли не хватить, чтобы Core Data заботился о постоянном хранении данных?
В любом случае, если я попытаюсь сохранить данные, вызвав saveAction(), он сообщает мне, что MOC не имеет никаких изменений (moc.hasChanges = false
), поэтому он даже не начинает сохранять данные с помощью этого метода.
Что еще мне нужно для обеспечения того, чтобы Core Data хранит данные правильно и подтвердите изменения?
Контроллеры массива устанавливаются в Interface Builder следующим образом:
- Режим: Наименование организации
- Наименование организации: «имя объекта в модели данных»
- Готовит Содержание проверяется
Они также правильно связаны с контекстом управляемого объекта.
упрощенный, соответствующий код из моего приложения:
/* Clear existing data. */
let range:NSRange = NSMakeRange(0, arrayController.arrangedObjects.count);
let indexSet:NSIndexSet = NSIndexSet(indexesInRange: range);
arrayController.removeObjectsAtArrangedObjectIndexes(indexSet);
let array = generateData();
/* Generate data. */
for i in 0 ..< array.count
{
let data = array[i];
/* Create new data object. */
var obj:NSObject = arrayController.newObject() as! NSObject;
obj.setValue(data.name, forKey: "name");
obj.setValue(data.type, forKey: "type");
obj.setValue(data.category, forKey: "category");
/* Add it to the array controller's contentArray. */
arrayController.addObject(obj);
}
UPDATE:
Похоже, мое приложение инстанцировании четыре МОС, когда он запускает. Я подозреваю, что способ, которым я добавляю их в Storyboard для двух контроллеров массива, неверен. Я добавил NSObject к двум контроллерам табличных представлений (которые также содержат свои контроллеры массивов) и установил их базовые классы в качестве моего CoreDataDelegate
(который является моим классом для основного кода данных, который обычно находится в AppDelegate
). Я подозреваю, что здесь создаются несколько экземпляров CoreDataDelegate
. Вопрос в следующем: как мне сделать это правильно, чтобы контроллеры массива могли достичь моего класса CoreDataDelegate
?
Вы создаете 'NSObject'? Показать код – Wain
Мой код немного сложнее и разбит на несколько классов и т. Д., Но я попытаюсь сделать комбинированный пример ... – BadmintonCat
Я добавил пример кода. – BadmintonCat