Обмен сообщениями Какао / Objective-C между представлениями, таблицами и контроллерами массива - PullRequest
0 голосов
/ 22 марта 2011

Я был разработчиком .NET много лет, но только начал работать с Objective-C / Cocoa.Я работал над книгой Hillegass вместе со Scott Stevens Up and Running.За последние несколько недель многому научился (во многом благодаря этому сайту), и я писал приложение, которое ранее написал в VS.Он использует основные данные и отслеживает мою большую библиотеку ноты.Приложение состоит из главного окна с горизонтальным разделением.Вид сверху имеет три таблицы для выбора критериев, так что я могу сузить то, что показывает в нижнем представлении, такие как тип музыки, десятилетие и жанр (например, баллада, 80-е и рок).

Мне удалось построить основнойview и имейте выборки создают предикат, который связан с предикатом filer контроллера массива в нижнем представлении.Нижний вид - это пользовательский вид с собственным пером.Когда выбор в представлении сверху изменяется, предикат перестраивается, но единственный способ применить его к таблице в нижнем представлении - это перезагрузить представление.Это было бы хорошо, за исключением одной вещи.В нижнем представлении также есть две таблицы с интерфейсом типа «мастер-детализация», показывающие исполнителя слева и песни справа.Поэтому, если у меня выбран художник в нижнем представлении, я хочу, чтобы этот выбор сохранялся при изменении критериев выбора в верхнем представлении.Если я перезагружаю нижний вид, я теряю выбор художника в нижнем виде.

Итак, после этого мини-романа возникает вопросКак отправить сообщение из основного представления, чтобы обновить предикат фильтра и обновить таблицу песен, не теряя фокус.Я знаю, что должен быть способ, но я не могу найти его.У меня есть собственный класс для создания и возврата предиката, и я могу создать экземпляр класса и получить предикат, который, как я сначала подумал, будет достаточным, поскольку предикат фильтра привязан к этому классу, но я предполагаю, что при этом создается новый экземпляр класса ипереплет не видит его.

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 23 марта 2011

Если вы хотите привязать свойства одного объекта к другому объекту (автоматически обновлять связанный объект, когда исходный объект изменяет значения), я рекомендую изучить Привязки какао

Например, вы можете легко привязать один объект к свойствам другого объекта с помощью

-bind:toObject:withKeyPath:options:

1008 * Е.Г. *

 [self bind:@"myDependendProperty"
   toObject:myOtherView
withKeyPath:@"myOtherViewsKeyPath" // this can be for instance @"frame", @"bounds"...
    options:myBindingOptionFlags];

Если вам не нужны автоматические обновления, вы можете просто придерживаться NSNotificationCenter и размещать там объекты с вашим собственным определенным именем уведомления (может быть произвольной строкой).

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