Модальные виды и делегирование - PullRequest
0 голосов
/ 03 марта 2010

В настоящее время я работаю над приложением для iPhone, которое запрашивает у пользователя информацию для входа в систему, проверяет эту информацию и предоставляет пользователю табличное представление их информации.

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

Когда учетные данные пользователей проверены, я хочу отправить в TableView под LoginView сообщение, которое говорит: «Эй, учетные данные пользователей были проверены, не могли бы вы собрать все данные для этого пользователя и отклонить контроллер представления. ' Я просмотрел несколько руководств от Apple, в частности, пример таблицы рецептов (использует делегирование для добавления рецептов), однако метод, который я реализую, никогда не выполняется, и надеялся, что кто-нибудь сможет пролить свет на мою проблему.

LoginViewController.h

@protocol GatherDataDelegate;

@interface LoginViewController : UIViewController {
    //lots of ivars
    id <GatherDataDelegate> delegate;

    //more ivars
}
//other properties
@property (nonatomic, assign) id <GatherDataDelegate> delegate;
@end

@protocol GatherDataDelegate <NSObject>
- (void)gatherForUserName:(NSString *)userName gatherForPassword:(NSString *)password;
@end

LoginViewController.m

else if ([dataString isEqualToString:@"Credentials Verified"]){
        [self.delegate gatherForUserName:username gatherForPassword:password]
    }

TableView.h

@interface RootViewController : UITableViewController <GatherDataDelegate>

// ivar и свойства

TableView.h

- (void)gatherForUserName:(NSString *)userName gatherForPassword:(NSString *)password;
    NSLog(@"calling gather");
}

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

Ответы [ 2 ]

1 голос
/ 03 марта 2010

Похоже, что вы все сделали правильно - вы создали протокол, реализовали его и отправили сообщение делегату ... тупой вопрос ... вы уверены, что задали свойство делегата LoginViewController после его создания?

0 голосов
/ 04 марта 2010

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

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

Во-вторых, когда контроллер табличного представления загружается, он просто запрашивает у модели данных информацию для пользователя, сама модель данных будет контролировать, какие данные пользователя она возвращает, основываясь на предыдущем вводе контроллера входа в систему. контроллеру tableview нужно только знать, как читать и отображать эту информацию пользователя, и ничего больше.

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

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