2016-07-13 7 views
-1

Я разрабатываю приложение, которое сохраняет информацию о зарегистрированном пользователе в CoreData и singleton классе. После входа в систему пользователя я получаю данные из coredata и устанавливаю переменные из singleton.iOS Swift - Перенос данных Singleton

Мой вопрос:

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

Спасибо!

ответ

1

Предположим, у вас есть локальное свойство с именем NSArray *myArray в файле singleton's .m, где хранятся все необходимые данные. Все, что вам нужно сделать, это добавить метод в заголовочный файл, который возвращает этот массив, если он не nil, а в случае nil сделать его перезагрузкой из хранилища и возврата. Также переопределите метод - (void)didReceiveMemoryWarning и сохраните данные в случае предупреждения о памяти.
Вот пример кода, написанного на Objective-C:

//Singleton.h file 
- (NSArray *)storedData; 

//Singleton.m file 
@property NSArray *myArray; 
... 
- (NSArray *)storedData 
{ 
    if (_myArray == nil) 
     _myArray = [self fetchMyArrayFromLocalStorage]; 

    return _myArray; 
} 

- (NSArray *)fetchMyArrayFromLocalStorage 
{ 
    //Some code to fetch data from local storage 
} 

- (void)saveMyArrayToLocalStorage 
{ 
    //Code to save _myArray to local storage 
} 

- (void)didReceiveMemoryWarning 
{ 
    [self saveMyArrayToLocalStorage]; 
    _myArray = nil; //Remove array if is needed 
    [super didReceiveMemoryWarning]; 
} 

Теперь вы всегда будете получать необходимые данные, необходимые, просто вызвав метод:
[[mySingleton sharedInstance] storedData]

+0

Спасибо за ваш ответ! Таким образом, если данные, хранящиеся в singleton, удаляются с помощью уменьшения памяти, единственный способ снова получить эти данные, чтобы снова получить локальный db. –

1
override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 

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

+0

Хорошо, я знаю, что. Но в этом случае переменные из синглтона станут нулевыми, поэтому мне нужно снова получить данные из coreData и снова установить переменные из singleton, no? –