【问题标题】:How to access an Array Controller from App Delegate?如何从 App Delegate 访问数组控制器?
【发布时间】:2011-09-22 13:00:09
【问题描述】:

我有一个简单的基于核心数据的 Cocoa 应用程序,它使用 ArrayController 来显示模型对象(员工)。两个按钮允许添加和删除员工。添加按钮绑定到数组控制器的 insert: 操作,但删除按钮连接到 App Delegate 中的 confirmDelete 方法,该方法显示模式确认对话框。

如何在 App Delegate 的 confirmDelete 方法中访问数组控制器,以从数组控制器(和底层存储)中删除选定的对象?

【问题讨论】:

    标签: cocoa nsarraycontroller


    【解决方案1】:

    你可以这样做-

    1. 将数组控制器绑定到应用委托

    2. 在confirmDelete方法中,检查你的条件后添加这一行:[yourArrayController remove:nil];

    希望这会有所帮助:)

    ---- 编辑----

    删除后请务必保存上下文,否则不会反映到持久化存储中。

    即。在这一行之后:

    [yourArrayController remove:nil];
    

    添加这一行:

    NSError *error = nil;
    if(![self.managedObjectContext save:&error]){
       NSLog(@"Some Useful Message!");
    }
    

    一般情况下,此代码用于 - applicationShouldTerminate: ,当应用程序退出时,它会自动将其保存到持久存储中。

    【讨论】:

    • 感谢您的帮助。我有点困惑。 Array Controller 已绑定到 App Delegate,位于 Array Controller 绑定的“Parameters”部分下。这是为了允许 Array Controller 访问 App Delegate 中的 managedObjectContext。我应该添加另一个绑定吗?如果是这样,哪一个有几个选项(嗯,你可能已经猜到我是 OS X 应用程序开发的绝对初学者)。再次感谢...
    • 我有点太兴奋了。虽然在确认删除时已删除的对象从列表中消失,但在重新启动应用程序后它仍然存在,因此显然它尚未从数据存储中删除。有人对此有任何想法吗?非常感谢!
    • @Roger 如果这没有回答您的问题,那么您应该更新您的问题,解释原因并取消选中此答案。
    • @Roger.. 我已经编辑了我的答案,请检查一下。也请考虑 Peter Hosey 的建议。
    【解决方案2】:

    为什么您的应用程序的代理会显示这样一个对话框?这不是应用程序委托的责任。

    我建议将它以及不属于该对象的任何其他内容作为应用程序的委托移动到另一个对象。在我的应用程序中,这通常是拥有窗口、数组控制器和该 nib 中的任何其他内容的对象,并且 拥有(在 applicationWillFinishLaunching: 中创建并在 applicationWillTerminate: 中发布)应用程序的委托。

    清理对象图几乎总是解决任何“我如何从对象 B 到对象 A?”的解决方案。问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-05
      相关资源
      最近更新 更多