CS193P UITabBarController MVC Справка по назначению 4 - PullRequest
0 голосов
/ 09 марта 2012

Я прохожу курс Stanford CS193P в iTunesU и немного озадачен тем, как выполнить часть недавно просмотренных фотографий в задании 4.

В задании нам нужен контроллер панели вкладок сдве вкладки.1-ая вкладка - это навигационный контроллер, который покажет таблицу мест, которая будет выдвигать таблицу с именами фотографий, которая будет выдвигать представление прокрутки с фотографией. 2-я вкладка - это навигационный контроллер, который покажет таблицу недавно просмотренных фотографий, которая будетнажмите вид прокрутки с фотографией.

У меня работает первая вкладка, и теперь, когда я нажимаю вид прокрутки с изображением, я также хочу добавить эту фотографию в массив недавних фотографий, что MVC долженвладеете этим массивом недавних фотографий?

  1. Контроллер табуляции (в этом случае в документах говорится, что этот класс не предназначен для подклассов)

  2. Корневой контроллер табличного представления 2-й вкладки (как передать текущую фотографию экземпляру в другой вкладке) (и, откровенно говоря, если первая вкладка знает о второй вкладке)

  3. Корневой контроллер табличного представления 1-й вкладки (тогда как вторая вкладка извлекает эти данные из первой вкладки?)

  4. Что-то еще

Полагаю, я все еще не совсем понимаю, что такое MVC, протоколы, делегаты и источники данных.Если у вас есть решение этой задачи, которое я мог бы просмотреть, я был бы очень признателен.

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

Ответы [ 3 ]

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

После множества дополнительных поисков я не нашел ни одного последовательного способа передачи данных с вкладки на вкладку.

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

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

Я сделал нечто подобное, и если я не укажу полностью на ваш вопрос, вы можете создать Singelton, который мог бы действовать как некая общая база данных. Он никогда не будет инициализирован обычным способом, просто создается при первом использовании. Этот сингелтон может содержать ваш массив, и вы можете затем вызывать его из любого места, написав просто:

[SingeltonType main].sharedPhotos

Следующий пример взят из моего собственного кода, где у меня есть «Пользователь», который является владельцем приложения. Там я храню базу данных с информацией, которая будет доступна в любом месте во время выполнения.

Заголовок:

@interface User : NSObject {
Database *_storage;
}

@property (nonatomic, retain) Database *storage;

+(User*)owner;

основной файл:

#import "User.h"

@implementation User

@synthesize password = storage = _storage;

static User* _owner = nil;

+(User*)owner {
    @synchronized([User class]) {
        if(!_owner) [[self alloc] init];

        return _owner;
    }
    return nil;
}

+(id)alloc {
    @synchronized([User class]) {
        NSAssert(_owner == nil, @"Attempted to allocate a second instance of a singleton.");
        _owner = [super alloc];

        return _owner;
    }
    return nil;
}

-(id)init {
    self = [super init];

    if(self != nil) {
        self.storage = [[[Database alloc] init] autorelease];
    }
    return self;
}

Тогда я просто называю это так:

[User owner].storage // which gives me access to it 

Надеюсь, это поможет! Действительно полезно, если вам нужен доступ к данным из разных мест:)

Примечание. У вас будет только ОДИН экземпляр этого объекта, и вы не сможете создать больше.

0 голосов
/ 05 июля 2012

Я немного запутался с этим вопросом, используя протокол.Я создал протокол в классе, отображающем изображение (и UIScrollView).Затем я принял протокол в классе tableController «просматриваемые фотографии» и реализовал тот метод протокола, который передает просматриваемое изображение.У меня проблема в том, как определить класс tableController «просматриваемые фотографии» в качестве делегата, учитывая, что 1) он еще не был загружен и может быть загружен только после просмотра изображений 2) как вы работаете, используя навигациюконтроллеры и контроллеры вкладок указывают на класс, объявляющий протокол.Хотелось бы услышать от экспертов о том, является ли протокол или метод класса правильным способом из методологии программирования?

Спасибо КБ

...