Какао: затруднено взаимодействие с объектами пользовательского интерфейса с помощью CoreData & Bindings - PullRequest
1 голос
/ 20 февраля 2011

Я разработчик LAMP, но новичок в Cocoa и создании настольных приложений в целом.Всю неделю я играл с XCode и IB, создавая простой диспетчер задач, чтобы изучить основы и освоиться с Objective-C.Закончено большинство учебников по cocoadevcentral, пролистываю Apple Docs и читаю Программирование какао для Mac OSX.

Я успешно построил DataModel (с использованием Core Data), пользовательский интерфейс с 2 NSTableViews (проекты и задачи)), добавьте / удалите кнопки для обоих TableViews и подключите привязки между NSArrayControllers и TableViews.Я могу добавлять проекты и задачи в каждом проекте.Работает как очарование.

Модель данных:

  • Проект: имя_проекта, задачи (отношения)
  • Задача: имя-задачи, estDuration, dueDate, статус, проект (отношения))

Я просто что-то упустил.Я спотыкался о том, как программно изменить элементы пользовательского интерфейса перед рендерингом и когда пользователь нажимает на строки или столбцы в NSTableViews.Я знаю, как создать класс в 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

Мне также известны уведомления и принципы их работы.Просто еще не проверял их.Но мне интересно, что мне нужно делать дальше (делегаты, уведомления, подкласс, ??), чтобы получить доступ к объекту пользовательского интерфейса из класса, который я создал, для выполнения некоторых из следующих действий:

  • Передданные отображаются, отформатируйте продолжительность для каждой задачи.Пример: от int "30" (модель данных) до строки "30m" (отображается в столбце таблицы)
  • Нажмите на длительность задачи для редактирования.Введите 2 часа и нажмите Enter.Затем 2h преобразуется из 2h в 120 для хранения в Core Data.
  • Добавление нового проекта добавляет новый проект (делает это уже) в его NSTableView, но затем помещает фокус на новую строку и делает еередактируемые.

Любые идеи о направлении, которое мне нужно выбрать сейчас, и / или о способах преодоления некоторых из вышеперечисленных, очень приветствуются.Спасибо.

1 Ответ

0 голосов
/ 21 февраля 2011

На ваши три вопроса отвечают:

  • документация привязок (особенно часть, касающаяся преобразователей значения );
  • Форматтеры
  • Вам нужно будет создать пользовательское действие, которое создает этот объект, устанавливает его в качестве выделения (см. привязку Selection вашего контроллера массива и ссылку на привязки выше), а затем выдает сообщение NSTableView для вводарежим редактирования.
...