Objective c Mac app NSArrayController绑定未自动保存核心数据
我的印象是,当使用绑定时(尽管已经过时,但仍遵循本教程。-您可以使用它查看我在做什么),持久性存储将自动保存您所做的更改。事实上,虽然那是几个小时前的事了,如果我现在发疯了,我也不会感到惊讶,但我让它工作了,当我做出改变时,它会坚持重新构建应用程序 然而,我根据教程构建的测试应用程序不再保存,尽管显示了我在应用程序中所做的更改,但一旦我重新运行应用程序,这些更改就会消失。我一直在检查Objective c Mac app NSArrayController绑定未自动保存核心数据,objective-c,xcode,macos,Objective C,Xcode,Macos,我的印象是,当使用绑定时(尽管已经过时,但仍遵循本教程。-您可以使用它查看我在做什么),持久性存储将自动保存您所做的更改。事实上,虽然那是几个小时前的事了,如果我现在发疯了,我也不会感到惊讶,但我让它工作了,当我做出改变时,它会坚持重新构建应用程序 然而,我根据教程构建的测试应用程序不再保存,尽管显示了我在应用程序中所做的更改,但一旦我重新运行应用程序,这些更改就会消失。我一直在检查核心数据调试菜单,当我按下“+”按钮时,什么也没有发生,该按钮设置为我的NSArrayController的“添加
核心数据
调试菜单,当我按下“+”按钮时,什么也没有发生,该按钮设置为我的NSArrayController
的“添加”方法。我知道它也在访问我的数据模型,因为我的标题文本字段(同样,请参阅教程,以便您知道我指的是什么)采用了我在DataModel部分中输入的默认文本。因此,唯一缺少的是实际的储蓄
因此,我真正的问题是,根据本教程,绑定的哪一部分实际上使managedObjectContext
保存?是否有未检查的标志或东西
我不知道这是否重要,但教程和我的项目之间存在差异,主要是nsArrayController
绑定到“App Delegate
”,模型键路径为“self.managedObjectContext
”。此外,我删除了所有的关系,试图减少这个问题
任何帮助都将不胜感激
问候,迈克
更新:以下是一些显示绑定的图片。 如何设置
NSArrayController
:
以下是我的数据模型的外观:
最后,这是我如何设置文本字段来更新nsarraycontroller
:
我希望这有助于了解有关设置的想法
谢谢,
Mike你能检查一下,确保你已经从你提到的教程的源代码中复制了所有的核心数据模板代码吗
具体而言,应用程序委托中的此部分:
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender {
NSError *error;
NSManagedObjectContext *context;
int reply = NSTerminateNow;
context = [self managedObjectContext];
if (context != nil) {
if ([context commitEditing]) {
if (![context save:&error]) {
// This default error handling implementation should be changed to make sure the error presented includes application specific error recovery. For now, simply display 2 panels.
BOOL errorResult = [[NSApplication sharedApplication] presentError:error];
if (errorResult == YES) { // Then the error was handled
reply = NSTerminateCancel;
} else {
// Error handling wasn't implemented. Fall back to displaying a "quit anyway" panel.
int alertReturn = NSRunAlertPanel(nil, @"Could not save changes while quitting. Quit anyway?" , @"Quit anyway", @"Cancel", nil);
if (alertReturn == NSAlertAlternateReturn) {
reply = NSTerminateCancel;
}
}
}
} else {
reply = NSTerminateCancel;
}
}
return reply;
}
如果存在,则当应用程序正常终止时,将保存更改。按下Xcode中的“停止”按钮将立即终止应用程序,而无需执行上述方法
我的猜测是,你没有发疯,但先是正确退出了应用程序,然后一直按“停止”按钮;) 基本上,当正确设置阵列控制器时,Cocoa绑定将处理保存。再也没有魔法了。很难理解你做了什么,改变了什么。一些截图和代码会有所帮助。它工作了,然后停止了,还是从来没有工作过?@SAE哦,好的,所以我可能有一个错误设置的数组。那我就调查一下。它以前工作过,但我更改了数据模型(实际上只是将关系从many
更改为one
),然后它停止了,就是这样。我明天会发布一些代码,因为现在有点晚了(凌晨1:30)。@SAE嘿,我刚刚上传了设置的图像,你觉得怎么样?谢谢,米克曼,加油。多谢各位,;很高兴知道我没有发疯!迈克。