在我的应用程序中,我使用了绑定到它们的每个NSArrayController
的两个表视图,并且阵列控制器被设置为使用核心数据实体。生成数据时,将创建一个NSObject
,并使用obj.setValue(_:forKey:)
将值存储在其中。在此之后,该对象仅通过ac.addObject()
添加到阵列控制器。Mac OSX - 核心数据未被存储
这应该不足以让Core Data负责数据的持久存储吗?
无论如何,如果我试图通过调用saveAction()来保存数据,它会告诉我MOC没有变化(moc.hasChanges = false
),所以它甚至没有开始用这种方法保存数据。
我还需要照顾使Core Data正确存储数据并确认更改吗?
阵列控制器在界面生成器设置如下:
- 模式:实体名称
- 实体名称:
- 准备内容检查
它们也正确绑定到托管对象上下文。
简化,从有关我的应用程序代码:
/* 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:
它看起来像我的应用程序实例4个MOCS当它启动。我怀疑我如何将它们添加到两个阵列控制器的Storyboard中是错误的。我向两个表视图控制器(也包含它们的数组控制器)添加了一个NSObject,并将它们的基类设置为我的CoreDataDelegate
(这是我的核心数据代码类,通常位于AppDelegate
)。我怀疑这是创建多个实例CoreDataDelegate
的地方。问题是:我应该怎么做,以便阵列控制器可以达到我的CoreDataDelegate
类?
你创建一个'NSObject'?显示代码 – Wain
我的代码稍微复杂一点,可以分成几个类,但我会尝试做一个组合的例子... – BadmintonCat
我已经添加了代码示例。 – BadmintonCat