2013-08-02 1 views
1

У меня есть приложение iOS, которое использует CoreData для сохранения данных, полученных с сервера через RestKit. Я создал кнопку выхода из системы, которая удаляет все NSUserDefaults при нажатии и отправляет пользователя обратно на экран входа в систему.Нужно перезапустить приложение после выхода из системы, чтобы создать новый managedObjectContext

Когда приложение запускается в первый раз, managedObjectStore и все другие функции CoreData генерируются в appDidFinishLaunchingWithOptions методе appDelegate. Однако, когда я выхожу из приложения и пытаюсь войти в исключение, вызывается, потому что мой managedObjectContext равен нулю. Это нуль, потому что я решил не передавать его из режима viewController входа в loginController. Я хочу очистить старый и создать новый для нового пользователя.

Я хотел бы создать новый managedObjectStore/Context, когда я удалю выход из системы и перейду на экран входа в систему. Что-то вроде этого возможно? В основном мне нужно перезапустить приложение, когда пользователь нажимает кнопку выхода из системы.

Может ли кто-нибудь показать мне, как это может быть сделано? Я довольно новичок в этом, поэтому, если это неуместно или ненужно, я открыт для изучения правильного/подходящего пути!

ответ

0

Перезагрузка приложения - очень плохая практика в отношении руководящих принципов интерфейса пользователя. Избегайте этого любой ценой.

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

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

NSManagedObjectContext *_sharedInstance; 
-(NSManagedObjectContext*) getManagedOBjectContext { 
    if (_sharedInstance==nil) { 
     _sharedInstance = <do create>; 
    } 
    return _sharedInstance; 
} 

///when we logout 
-(IBaction) didLogout { 
    <cleanup> 
    _sharedInstance = nil; 
} 

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

+0

Wow Спасибо за быстрый ответ. Я прочитал несколько сообщений о том, что возобновление будет плохой практикой, поэтому я буду принимать ваши советы и избегать этого. Мне нравится метод доступа лучше, чем создание данных в методе didLogin. Однако мне нужно немного разъяснить. Я установил «Store» на nil при выходе из системы, но в какой момент я назову 'getManagedObjectContext'? – Ben

+0

Всякий раз, когда вам это нужно. вы можете вызвать [appDelegate getManagedOBjectContext]; –