Cocoa:对使用 CoreData 和 Bindings 与 UI 对象交互感到困惑

标签 cocoa delegates notifications nstableview

我是一名 LAMP 开发人员,但对 Cocoa 和构建桌面应用程序总体来说还是新手。整个星期都在使用 XCode 和 IB 制作一个简单的任务管理器来学习框架并熟悉 Objective-C。完成了 cocoadevcentral 上的大部分教程,浏览了 Apple 文档并阅读了 Mac OSX 的 Cocoa 编程。

我已经成功构建了 DataModel(使用 Core Data)、带有 2 个 NSTableView(项目和任务)的 UI、添加/删除两个 TableView 的按钮,并连接了 NSArrayController 和 TableView 之间的绑定(bind)。我可以添加项目以及每个项目中的任务。就像魅力一样。

数据模型:

  • 项目:项目名称、任务(关系)
  • 任务:任务名称、预计持续时间、到期日期、状态、项目(关系)

我只是错过了一些东西。我一直在困惑如何在渲染之前以及当用户单击 NSTableView 中的行或列时以编程方式更改 UI 元素。我知道如何在 XCode 中创建一个类并将其绑定(bind)为 IB 中的委托(delegate)。我能回应的似乎有点有限。我已经在数据模型中对项目实体进行了子类化,以尝试检测 NSTableView 中的插入和删除,但这似乎不是正确的方法。

我正在测试的子类:

// ProjectManagedObject.h
#import <Cocoa/Cocoa.h> 

@interface ProjectManagedObject : NSManagedObject {

}

@end


// ProjectManagedObject.m
#import "ProjectManagedObject.h"

@implementation ProjectManagedObject

- (void)awakeFromInsert
{
    [super awakeFromInsert];
    NSLog(@"new project inserted");
}

- (void)awakeFromFetch
{
    [super awakeFromFetch];
    NSLog(@"project awakeFromFetch");
}

- (BOOL)validateForDelete:(NSError **)error
{
    NSLog(@"project: validating for delete");       
    return YES;
}

@end

我也了解通知及其基本工作原理。只是还没有测试过它们。但我想知道接下来我需要做什么(委托(delegate)、通知、子类、??)才能从我创建的类访问 UI 对象以执行以下一些操作:

  • 在显示数据之前,设置每个任务的持续时间格式。示例:从 int“30”(数据模型)到字符串“30m”(显示在表列中)
  • 单击任务的持续时间进行编辑。输入 2h,然后按 Enter 键。然后 2h 从 2h 转换为 120 以存储在核心数据源中。
  • 添加新项目会在其 NSTableView 中添加新项目(已经执行此操作),但随后将焦点放在新行上并使其可编辑。

任何关于我现在需要采取的方向和/或克服上述一些问题的方法的想法都非常感谢。谢谢。

最佳答案

您的三点答案是:

  • bindings documentation (特别是关于 value transformers 的部分);
  • Formatters ;和
  • 您必须生成一个自定义操作来创建该对象,将其设置为选择(请参阅数组 Controller 的选择绑定(bind)和上面的绑定(bind)引用),然后向 NSTableView 发送消息进入编辑模式。

关于Cocoa:对使用 CoreData 和 Bindings 与 UI 对象交互感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5055233/

相关文章:

java - 看不到通知 - Android Studio

c++ - Windows C++ 中的 MSN Messenger/Growl 样式警报

ios - "Add"编辑时按钮,actionClicked 发件人

ios - 如何将自定义委托(delegate)设置为 UITableViewController?

macos - 带背景和wantsLayer的IKImageBrowserView

c# - 异步委托(delegate)与线程

objective-c - 使用命名参数实现委托(delegate)

cocoa - 是否有像 "willShowWindow"这样的 NSWindow 通知/委托(delegate)方法?

objective-c - 使用 performSelector : to access BOOL property

objective-c - NSString分配和初始化