У меня есть оператор if
, который передается этому файлу реализации через NSUserDefaults
, как показано ниже.если оператор выполняется до того, как его условные переменные установлены
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *code = [defaults objectForKey:@"codeKey"];
selectedCodeLocal = code;
После этого кода, чтобы восстановить строковую переменную, у меня есть, если заявление:
if (selectedCodeLocal == @"1")
textView.text = "@blah blah blah";
else
textview.text = "@abcdefghijklmnop";
Когда я построить и запустить, оказывается, что переменная передается, но он никогда не передается, пока ПОСЛЕ выполнения задания if
.
У меня есть NSLog
вокруг этого кода, которые возвращают строчную переменную selectedCodeLocal
, а значение переменной всегда на один шаг. (Например, если я сначала передаю его как 4, а затем передам его как 1, он будет возвращен в журнале первым как 1, затем как 4, затем как 1) Извините, если я вас смутил.
UPDATE:
- (void)viewDidLoad {
[super viewDidLoad];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults synchronize];
selectedCodeLocal = [defaults objectForKey:@"codeKey"];
NSLog(@"set: %@",selectedCodeLocal);
self.navigationItem.title = selectedCodeLocal;
[textView setClipsToBounds:NO];
[textView setEditable:NO];
[textView setFrame:CGRectMake(20, 100, 50, 50)];
if ([selectedCodeLocal isEqualToString:@"100"])
textView.text = @"abc";
else
textView.text = @"xyz";
}
NSLog по-прежнему отображается старое значение selectedCodeLocal
.
UPDATE: здесь, где установлен этот ключ. (в предыдущем виде)
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//Get the selected code
NSString *selectedCode = nil;
if(searching)
selectedCode = [copyListOfItems objectAtIndex:indexPath.row];
else {
NSDictionary *dictionary = [listOfItems objectAtIndex:indexPath.section];
NSArray *array = [dictionary objectForKey:@"codesKey"];
selectedCode = [array objectAtIndex:indexPath.row];
}
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:selectedCode forKey:@"codeKey"];
[defaults synchronize];
}
@Firoze Lafeer: Ответит ли это на ваш вопрос?
Я изменил код так: 'NSUserDefaults * дефолты = [NSUserDefaults standardUserDefaults];' ' selectedCodeLocal = [по умолчанию objectForKey: @ "codeKey"];' ' [по умолчанию синхронизирует],' ' NSLog (@ "set:% @", selectedCodeLocal); ' Файл журнала по-прежнему показывает, что строковая переменная' selectedCodeLocal' не была обновлена до следующего запуска этой части кода. (это всегда на 1 шаг позади) –
[defaults syncrhonize] должен быть выше selectedCodeLocal –
Это по-прежнему один шаг назад; \ я поместил '[defaults synchronize]' before' selectedCodeLocal = [defaults objectForKey: @ "codeKey"]; 'и после' NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; ' –