Информация о перетаскивании какао - PullRequest
1 голос
/ 12 марта 2012

У меня есть очень простой тест приложения, в котором я хочу перетащить файлы в объект NSImageView.

Я уже могу получить список файлов этого действия, но теперь я хочу сохранить эти данныев массиве для доступа в представлении с использованием привязок данных.Единственный код, который у меня хорошо работает с жесткими привязками данных, имеет массив в AppDelegate, к которому я обращаюсь с помощью контроллера массива.Но затем мои данные находятся внутри класса, который я создал для NSImageView, называемого «DropView», который расширяет класс «NSImageView» и обрабатывает действие удаления.

Как я могу передать информацию массива, чтобы сделать возможными привязки?

Любые предложения приветствуются.Спасибо!

Ответы [ 2 ]

1 голос
/ 22 марта 2012

Я решил использовать синглтон в большом проекте. В этом меньшем я сделал это так:

1 - Добавить ссылку AppDelegate на подкласс (файл m):

#import "AppDelegate.h"

2 - Вызвать метод, объявленный в AppDelegate, передав всю необходимую информацию, например:

[[NSApp delegate] doSomething:someInformation];

3 - Установить всю информацию в используемом методе.

4 - сделать привязки в интерфейсе.

0 голосов
/ 13 марта 2012

Простой ответ заключается в том, что вам не следует хранить данные модели (массив URL-адресов файлов) в представлении.

Ваше представление должно передать список файлов другому объекту контроллера, который затем сохранит список файлов в каком-либо объекте модели. Вот что такое MVC.

Один из способов сделать это - использовать шаблон делегата, где ваше представление объявит метод протокола примерно так:

@protocol YourViewProtocol
    - (void)imageView:(YourImageViewClass*)aView receivedDroppedURLs:(NSArray*)arrayOfURLs;
@end

Ваш взгляд также будет иметь слабое свойство datasource:

@interface YourImageViewClass : NSImageView
@property (weak) id <YourViewProtocol> datasource;
@end

Затем вы установите объект контроллера в качестве источника данных представления. Контроллер должен соответствовать протоколу и реализовывать его метод:

@interface YourController <YourViewProtocol>
- (void)imageView:(YourImageViewClass*)aView receivedDroppedURLs:(NSArray*)arrayOfURLs;
@end

Затем в методе view, который получает перетаскивание, вы должны сделать что-то вроде:

- (void)receivedDroppedURLs:(NSArray*)urls
{
    if([datasource conformsToProtocol:@protocol(YourViewProtocol)])
    {
        [datasource imageView:self receivedDroppedURLs:urls];
    }
}

Другой способ сделать это - через пользовательские привязки. Реализация привязок в пользовательском представлении немного сложнее, и я бы рекомендовал сначала использовать шаблон делегата / источника данных, если вы не являетесь опытным разработчиком Cocoa.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...