Как реализовать делегат для объекта, который создается из разных мест в приложении - PullRequest
0 голосов
/ 30 мая 2011

Если говорить более конкретно, у меня есть приложение с несколькими табличными представлениями, которые детализируют данные для отображения изображения в подробном представлении.Когда отображается подробный вид, приложение добавляет это изображение (его имя) в массив недавно просмотренных изображений.Недавно просмотренные изображения отображаются в виде таблицы на первом экране приложения.

Проблема заключается в том, что подробное представление создается табличным представлением в конце строки списка табличных представлений.Подробное представление также создается первым табличным представлением при нажатии на последний элемент.

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

Я думаю, что мне нужно переосмыслить дизайн своего приложения и кто должен хранить данные для недавно просмотренных изображений.Я думал, что первое представление должно содержать эти данные, поскольку оно отображает их, но я немного растерялся из-за того, как сделать это так, чтобы учитывать хороший дизайн кода.Я могу заставить его работать с NSUserDefaults, но я не уверен, действительно ли это то, для чего его следует использовать, или это лучший метод.

Я ценю любой вводный текст.

Джейми

1 Ответ

1 голос
/ 30 мая 2011

Я бы увидел здесь несколько решений:

1) продолжить работу с NSUserDefaults, списки LRU (последние использовавшиеся недавно, я полагаю) часто сохраняются в пользовательских настройках, независимо от того, хороший это или плохой дизайн,Если это не занимает много места и работает для вас, просто продолжайте.

2) создайте общий контекст для LRU, возможно, с помощью синглтона, который был бы доступен для всего приложения, поместите ваши изображениятам и вернуть их в любое время, когда они вам нужны.На самом деле вы могли бы сделать его интерфейс с помощью методов класса и не потрудиться сделать его настоящим синглтоном.Методы класса представляют хороший статический контекст, который легко доступен.В ObjC их даже можно переопределить!Что довольно круто по сравнению с Java.

3) использовать шаблон фабрики для создания представлений: существует один класс фабрики, который знает делегат, создание новых представлений будет снова реализовано с использованием методов класса: каждый метод create будетустановить одного известного делегата для каждого представления независимо от точки создания.

4) теперь этот вариант действительно излишний, но очень «несвязанный»: отправлять уведомления с недавно использованными изображениями.Те, кто заинтересован в их знании, могут зарегистрироваться, являются наблюдателями и, в общем, получают изображения ...

...