2010-08-29 2 views
0

Я пишу программу для iPhone, у которой есть контроллер входа в систему, который позволяет пользователю войти в систему. У меня есть метод, который я использую в этом контроллере, который проверяет подлинность имени пользователя и пароля. Я использую keychain для хранения имени пользователя и пароля, но мне интересно, как я общаюсь за пределами класса, что имя пользователя и пароль являются подлинными без дублирования кода.Цель C: Общение между классами

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

ответ

3

Хороший вопрос, и подход Саймона, конечно, причина возможность.

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

Вы можете прочитать на Singleton узора здесь: http://developer.apple.com/iphone/library/documentation/cocoa/conceptual/cocoaFundamentals/CocoaDesignPatterns/CocoaDesignPatterns.html#//apple_ref/doc/uid/TP40002974-CH6-SW6

Надеется, что это помогает.

Эндрю

+0

Есть ли какая-либо польза от использования этого маршрута против маршрута Саймона? – wierddemon

+1

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

+0

Использование приложения Делегат просто использует существующий синглтон для хранения, по сути, глобальных переменных, вместо создания нового пользовательского синглтона. Меньше строк кода. – hotpaw2

1

Одним из способов было бы переместить код для обработки хранения и проверки в классе AppDelegate имя пользователя/пароль, то в ваши классы зрения контроллера вы можете сделать что-то вроде:

MyAppDelegate *appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication] delegate]; 

// Store password 
[appDelegate storePassword:foo forUsername:bar]; 

// Then later, or in another class... 
if ([appDelegate userIsAuthenticated]) { 
    // Stuff for authenticated users goes here 
} 

(Вам нужно добавить #import "MyAppDelegate.h" к началу файла .m контроллера представления.)

0

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

Объект модели паролей не обязательно должен быть одиночным (для некоторых приложений может потребоваться несколько паролей и т. Д.).

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

Смежные вопросы