2015-02-25 2 views
-1

У меня есть UILabel, называемый 'labelA'. В этом ярлыке находится буква «А».UILabel текст не сохраняется в NSUserDefault

Когда я использую NSUserDefault и запускаю свое приложение, ярлык пуст, но я не знаю почему?

Вот мой ViewController.m файл:

- (void)viewDidLoad { 

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; 

self->labelA.text = [defaults objectForKey:@"labelAtext"]; } 


- (void)defaults { 

NSString *textLabelA = labelA.text; 

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; 

[defaults setObject:textLabelA forKey:@"labelAtext"]; 
[defaults synchronize]; 
} 

Вот мой NSString в ViewController.h файл

NSString *textLabelA [email protected]"A"; 

Когда я загрузить мое приложение без NSUserDefault the labelA.text = A. Кто-нибудь знает, в чем моя проблема. Большое спасибо :-)

+0

Где вы звоните по умолчанию? –

+0

Я называю это кнопкой. '- (IBAction): (id) отправитель { [self defaults]; } ' – euleec7

+0

self-> замените его на себя. –

ответ

0

Ваш метод по умолчанию не вызывается нигде, поэтому текстовое значение никогда не сохраняется в NSUserDefaults.

[self defaults]; // This needs to be called somewhere before you try and access NSUserDefaults. 

Вы должны также получать доступ к себя, используя точечную нотацию, а не ->

self.labelA.text = [defaults objectForKey:@"labelAText"]; 

-> для разыменования структуры в C, для получения дополнительной информации - What is "->" in Objective C?

+0

если я использую 'self.labelA.text = [defaults objectForKey: @" labelAText "];' я получаю сообщение об ошибке. свойство 'labelA' не найдено на объекте типа "ViewController"; Вы имели в виду acces переменную экземпляра 'labelA'? – euleec7

+0

Должен ли я называть '[self defaults]; 'in' - (void) viewDidLoad {} '? – euleec7

+0

Где угодно, если значение задано в NSUserDefaults, прежде чем пытаться читать NSUserDefaults. Трудно точно сказать, что вы хотите от своего вопроса. – Tim

0

При использовании UserDefaults. Вы должны сначала проверить, получаете ли вы значение, как будто это значение не существует, вам нужно его установить или нет.

NSString * myPreference = @"labelAtext"; 

- (void)viewDidLoad { 
    NSUserDefaults* userDefault = [NSUserDefaults standardUserDefaults]; 
    id labelValue = [userDefault objectForKey:myPreference]; 
    if (labelValue)  // if preference exist 
     self.labelA.text = labelValue; // set ur label 
    else 
     [self storeDefaultValue]; // you store a default value 
} 

- (void)storeDefaultValue 
{ 
NSString *myDefaultValue = nil; 
if ([self.labelA.text isNotEqualToString:@""]) // if ur label not empty 
     myDefaultValue = self.labelA.text; 
else 
     myDefaultValue = @"Not Available"; // or whatever defaults value you want 
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setObject:myDefaultValue forKey:myPreference]; 
[defaults synchronize]; 
} 

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

+0

ОК, я объясню, что я не хочу делать. У меня есть «письмо случайное», которое показывает с каждой кнопкой «generateLetter» новое письмо на этикетке «labelShowLetter». для каждой буквы из a-z у меня есть дополнительная метка (например, labelA, labelB ....). если labelShowLetter.text isEqualTo labelA.text, то labelA.text = @ ""; для этого мне нужен NSUserDefault ... надеюсь, это вам поможет? – euleec7

+0

Забудьте о ярлыке, имени пользователя, имени функции и всех технических терминах, а также просто укажите цель вашего кода. Я думаю, что вам не нужен UserPreference, если я хорошо понимаю. NSUserDefaults предназначен для хранения пользовательских предпочтений, таких как любимый цвет, конфигурация, специфичная для пользователя, скорее как параметр конфигурации относительно конкретного пользователя. https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/index.html – Benpaper

+0

ahh ok. что я хочу. что мой текст изменится на моем ярлыке, не изменится, когда мое приложение перейдет на задний план. – euleec7

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