2013-12-11 7 views
0

Я не хочу сохранять данные для входа в хранилище ключей и сохранять их. Я хочу сохранить пароль пользователя во время использования приложения и каждый раз, когда он запустит приложение, будет иметь имя пользователя. (Чтобы сделать его безопасным). Я планировал сохранить username_password в объекте класса AppDelegate и, таким образом, использовать учетные данные для входа в систему, чтобы вызвать вызовы веб-службы через приложение. Это целесообразно? Или я должен передать пароль имени пользователя через объекты контроллера?рекомендуется сохранить имя пользователя в appDelegate iOS

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

+0

https://developer.apple.com/library/mac/documentation/Cocoa/ Ссылка/Foundation/Classes/nsuserdefaults_Class/Reference/Reference.html – NANNAV

+0

NANNAV: Я не хочу сохранять NSUserDefaults. Поскольку значение сохраняется в NSUserDefaults. Я беспокоюсь о безопасности, и поскольку это не требование для входа пользователя в систему, я всегда могу сохранить его в непостоянном хранилище. – Jasmine

ответ

0

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

Если вы хотите вставить имя пользователя и пароль каждый раз, когда вы входите в приложение у вас есть две опции:

1 - Создание двух переменных в AppDelegate 2 - Создание глобального класса для хранения информации

Лично я рекомендую создать глобальный класс.

Например, предположим, что ваш класс называется «Глобальный». В вас .h:

#import <Foundation/Foundation.h> 

@interface GlobalValues : NSObject 

@property (strong, nonatomic) NSString *username; 
@property (strong, nonatomic) NSString *password; 

@end 

В вашем .m файл «Global» Вы должны создать экземпляр, чтобы иметь сохранение информации.Тогда вы инициализации, что:

#import "GlobalValues.h" 
#import "L0ViewController.h" 

@implementation GlobalValues 

@synthesize username; 
@synthesize password; 

GlobalValues *globalV = nil; 

+ (GlobalValues *)getInstanceOfGlobalValues 
{ 
    if (globalV == nil) 
    { 
     globalV = [[GlobalValues alloc] init]; 

     globalV.username = 0; 
     globalV.password = 0; 
    } 

    return globalV; 
} 

Для Асесс информации просто вызвать метод:

GlobalValues *global = [GlobalValues getInstanceOfGlobalValues]; 
NSString *pass = global.password; 

С уважением

+0

Мигель: Спасибо! Почему я должен создать глобальный класс, а не использовать AppDelegate. Это для разделения логики? – Jasmine

+0

@ Жасмин Да, это так. –

0

Вы правы, если не сохраняете их до некоторой настойчивости, таких как NSUserDefaults или CoreData, вы потеряете любые переменные, установленные в AppDelegate при каждом запуске приложения.

+0

Darren102: Спасибо. Я заметил, что делегат приложения сохраняется, если приложение идет в фоновом режиме, а затем снова активируется. Это не сохраняется, если я убью приложение. – Jasmine

+0

Это правильно, когда в фоновом режиме оно находится только в приостановленном состоянии, поэтому ваши данные сохраняются, если приложение не будет убито предупреждениями с низкой памятью. – darren102

1

Первый: Вы хотите сохранить только один пароль/пользователя от пользователя? или вы хотите сохранить несколько паролей/пользователей?

Второй: Зачем сервер? Вы хотите сделать вызов веб-службы для извлечения и сохранения пароля/пользователя?

Третий: Никогда, никогда не сохраняйте пароль/пользователя в NSUserDefault, из соображений безопасности.

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

Проверить этот учебник для хэша и брелка информация:

Basic Security in iOS part 1

Basic Security in iOS part 2

+0

Софи: 1) Только одно имя пользователя/пароль 2) по серверу, я имел в виду веб-службы, которые я вызываю для выполнения других функций приложения. 3) Да. Спасибо. Я не сохраняю имя пользователя/пароль в NSUserDefaults. Я не хочу настойчивости. следовательно, могу ли я сохранить имя пользователя/пароль в AppDelegate? – Jasmine

+0

Лучше, чтобы вы отделили классы. Например: сохранить пароль, если он находится в классе «Сохранить мой PIN-код/​​пароль». И в - (void) applicationDidBecomeActive: (UIApplication *) приложение в классе вызова AppDelegate «Load View Ask For My Password» –

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