2013-10-25 2 views
1

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

Итак, теперь передается строка, НО, я хочу, чтобы это значение оставалось отображаемым на первом контролере после закрытия приложения и повторного открытия приложения.

Значение сохраняется в NSUserDefaults кстати и с NSLog, который я вижу на conosole, он сохраняется в папке приложений, но это значение не сохраняется на дисплее UILabel.

Он отображает его только тогда, когда я помещаю save, но затем закрываю и снова открываю, он исчезает, но в NsLog он все еще находится внутри приложения, но не отображается на дисплее UILabel.

Как я могу обратиться к этому вопросу?

На моем appDelegate.h я есть

@property (strong, nonatomic) NSString *sharedString; 

Чтобы передать данные secondViewController в firstViewController.

В методе экономии на моем secondViewController у меня есть функции, связанные с AppDelegate.h декларации , которая:

AppDelegate *apiDelegate = [[UIApplication sharedApplication] delegate] 
apiDelegate.sharedString = self.textFieldData.text; 

И в моем firstViewController у меня есть метод, который отображать данные из второго ViewController :

-(void) viewDidAppear:(BOOL)animated { 
    AppDelegate *apiDelegate = [[UIApplication sharedApplication] delegate] 
    self.DisplayData.text = appDelegate.sharedString; 
    [super viewDidAppear: NO]; 

есть ли что-то неправильно, который разве сохраняя данные останутся нетронутыми после закрытия приложения или я я что-то пропустил?

+1

Почему бы просто не заполнить его из NSUserDefaults? И вы синтезируете sharedString в appdelegate? – bizsytes

+1

Вы также можете изменить [super viewDidAppear: NO]; to [супер viewDidAppear: анимированные]; – bizsytes

+1

Я бы порекомендовал вам не использовать делегат приложения для передачи данных между классами. Существуют более эффективные методы, такие как публичные свойства, делегаты и т. Д., Которые являются лучшей практикой кодирования. – Andrew

ответ

4

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

Прежде всего вам необходимо установить иерархию относительно того, как вы получаете дочерний элемент управленияViewView от контроллера parentViewController. Один из способов передачи данных из childViewController в parentViewController - это использование делегата. Другой может использовать протокол KVC/KVO. https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html

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

Чтобы сохранить значение. Вы можете просто сохранить его с помощью NSUserDefaults. Я не вижу какой-либо код в ваш пост, но вы можете просто определить ключ и сохранить значение с помощью NSUserDefaults:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setObject:sharedString forKey:@"sharedString"]; 
NSString *sharedStringFromDefaults = [defaults objectForKey:@"sharedString"]; 

Кроме того,

AppDelegate * apiDelegate = [[UIApplication sharedApplication] делегат]

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

1
//add this code when you want to store string 
[[NSUserDefaults standardUserDefaults] setObject:self.textFieldData.text forKey:@"sharedString"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

//and when you want string than 
self.DisplayData.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"sharedString"]; 
+0

Как код сохраняет данные firstViewControllers, отображенные из входных данных secondViewControllers? Я имею в виду, я знаю, что он сохранил его в папке plist где-то в приложении, но мне нужно значение, например: 125.50, чтобы оставаться видимым на UIlabel, расположенном в первом контролере экрана, даже после того, как я закрыл приложение. Первоначально он отображает сохраненное значение, но когда я закрываю приложение и снова его открываю, UILabel больше не держит его, но он хранится в NSUserDefault внутри, просто не отображая его на объекте UILabel. – Amit

+0

Любые предложения? – Amit

+0

Я не понимаю, в чем проблема. Если вы не видите данные в UILabel, когда приложение становится вживую, вы, вероятно, не устанавливаете данные в UILabel в первую очередь. Внутри viewDidLoad для firstViewController попытайтесь получить значение из 'NSUserDefaults' и зарегистрируйте его на консоли. Проверьте, есть ли у вас данные в первую очередь. – p0lAris

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