Cocoa:使用CoreData& amp;绑定

时间:2011-02-20 04:24:52

标签: cocoa delegates notifications nstableview

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

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

数据模型:

  • 项目:projectName,tasks(relationship)
  • 任务:taskName,estDuration,dueDate,status,project(relationship)

我只是遗漏了一些东西。我一直在寻找如何在呈现之前以及当用户点击NSTableViews中的行或列时以编程方式更改UI元素的绊脚石。我知道如何在XCode中创建一个类并将其绑定为IB中的委托。我可以回应的内容似乎有点受限。我已经将数据模型中的项目实体子类化,以尝试检测插入&从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

我也知道通知以及它们基本如何工作。还没有测试过它们。但我想知道接下来我需要做什么(委托,通知,子类,??)从我创建的类中访问UI对象以执行以下操作:

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

我现在非常感谢任何有关我现在需要采取的方向和/或如何解决上述问题的方法。感谢。

1 个答案:

答案 0 :(得分:0)

你的三点回答:

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