Mac OSX 应用程序:与 NSArrayController NSTableView 核心数据添加记录相关的问题

Posted

技术标签:

【中文标题】Mac OSX 应用程序:与 NSArrayController NSTableView 核心数据添加记录相关的问题【英文标题】:Mac OSX app : Issue Related to NSArrayController NSTableView Core data Adding Record 【发布时间】:2018-02-28 11:15:56 【问题描述】:

我使用了NSArrayController NSTableViewCore data 绑定

我已经采取了一个button 并将NSArrayControlleradd: 方法连接到它的操作。

关于添加新记录

TableView 添加并显示新记录。NSArrayController's add:方法调用

问题: 核心数据不加值(Sqlite 类型)。

在应用程序重新启动时显示旧数据。

【问题讨论】:

您是否正在保存/同步 coredata 上下文? 我没有保存上下文,添加时:动作数据被添加到 arraycontroller 并显示在 tableview 中。在 arraycontroller 和 nstableview 绑定的情况下,我需要添加额外的代码来保存上下文 以及在哪里添加上下文保存代码 可以是任何东西。你绑定了什么?您何时/如何设置阵列控制器的managedObjectContext? IB 属性检查器中数组控制器的设置是什么?这是一个基于文档的应用程序吗? 【参考方案1】:

这是一个苹果示例代码。基本上它会尝试在应用程序终止之前保存上下文。根据您的具体情况,您可能会将功能移至其他地方。

func applicationShouldTerminate(_ sender: NSApplication) -> NSApplication.TerminateReply 
    // Save changes in the application's managed object context before the application terminates.
    let context = persistentContainer.viewContext

    if !context.commitEditing() 
        NSLog("\(NSStringFromClass(type(of: self))) unable to commit editing to terminate")
        return .terminateCancel
    

    if !context.hasChanges 
        return .terminateNow
    

    do 
        try context.save()
     catch 
        let nserror = error as NSError

        // Customize this code block to include application-specific recovery steps.
        let result = sender.presentError(nserror)
        if (result) 
            return .terminateCancel
        

        let question = NSLocalizedString("Could not save changes while quitting. Quit anyway?", comment: "Quit without saves error question message")
        let info = NSLocalizedString("Quitting now will lose any changes you have made since the last successful save", comment: "Quit without saves error question info");
        let quitButton = NSLocalizedString("Quit anyway", comment: "Quit anyway button title")
        let cancelButton = NSLocalizedString("Cancel", comment: "Cancel button title")
        let alert = NSAlert()
        alert.messageText = question
        alert.informativeText = info
        alert.addButton(withTitle: quitButton)
        alert.addButton(withTitle: cancelButton)

        let answer = alert.runModal()
        if answer == .alertSecondButtonReturn 
            return .terminateCancel
        
    
    // If we got here, it is time to quit.
    return .terminateNow

【讨论】:

你能提供你的绑定代码吗?如此多的假设很难说出哪里出了问题。【参考方案2】:

您可能没有在 NSArrayController 上设置 managedObjectContext 和 entityName。

【讨论】:

以上是关于Mac OSX 应用程序:与 NSArrayController NSTableView 核心数据添加记录相关的问题的主要内容,如果未能解决你的问题,请参考以下文章

Mac OS 的一点历史: Mac OS, Mac OSX 与Darwin

Mac OSX的开机启动配置

如何在 Mac OSX 上将 DCMTK 与 Qt 链接

更改调试字体颜色 - Serilog C# .NET Core 3.1 Jetbrains Rider Mac OSX

MAC OSX操作系统的简介

[Mac OSX技巧] 通过命令行开启安全性与隐私中的任何来源