【发布时间】:2015-07-14 00:14:06
【问题描述】:
在我的应用程序中,我使用了两个表视图,它们分别绑定到它们的NSArrayController,并且数组控制器设置为使用 Core Data 实体。生成数据时,会创建一个NSObject,并将值与obj.setValue(_:forKey:) 一起存储在其中。在此之后,对象被简单地添加到带有ac.addObject() 的数组控制器中。
让 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);
}
更新:
看起来我的应用在启动时正在实例化四个 MOC。我怀疑我在故事板中为两个数组控制器添加它们的方式是错误的。我向两个表视图控制器(也包含它们的数组控制器)添加了一个 NSObject 并将它们的基类设置为我的CoreDataDelegate(这是我的核心数据代码类,通常在AppDelegate 中)。我怀疑这是创建CoreDataDelegate 的多个实例的地方。问题是:我应该如何正确地执行此操作,以便阵列控制器可以访问我的 CoreDataDelegate 类?
【问题讨论】:
-
您创建了一个
NSObject?显示代码 -
我的代码有点复杂,分为几个类等,但我会尝试做一个组合示例......
-
我已经添加了代码示例。
-
应该没问题。您何时以及如何保存(您可以有多个上下文,还是没有上下文)?
-
跟随@wain 进入兔子洞...您在上下文中调用 save ,然后在持久性协调器上调用它 .. 然后将其保存到适当的位置(这取决于您的配置可以是 RAM(可能是易失性的,或者磁盘或云/磁盘等))
标签: ios macos swift core-data nsarraycontroller