NSUserDefaults не работает ... или это я? - PullRequest
0 голосов
/ 11 декабря 2011

Итак, я пытаюсь передать URL между представлениями.Я думал, что следующий код будет топать все, что находится в @ "url" каждый раз, когда пользователь делает выбор из таблицы.Что на самом деле происходит, так это то, что первый выбор всегда возвращается и никогда не растоптан.Хм, может это я?Есть идеи?Спасибо.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == 0)
    {
        [self saveToUserDefaults:@"http://url1"];
        [self.navigationController pushViewController:self.webController animated:YES];
    }
    else if (indexPath.row == 1)
    {
        [self saveToUserDefaults:@"http://url2"];
        [self.navigationController pushViewController:self.webController animated:YES];
    }
}

-(void)saveToUserDefaults:(NSString*)myString
{
    NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

    if (standardUserDefaults) 
    {
        [standardUserDefaults setObject:myString forKey:@"url"];
        [standardUserDefaults synchronize];
    }
}

На принимающей стороне:

-(NSString*)retrieveFromUserDefaults
{
    NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
    NSString *val = nil;

    if (standardUserDefaults) 
        val = [standardUserDefaults objectForKey:@"url"];

    return val;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    NSString *url = self.retrieveFromUserDefaults;
    [self handleURLRequest:url];
}

Ответы [ 2 ]

6 голосов
/ 11 декабря 2011

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

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

1 голос
/ 11 декабря 2011

Ваш код для сохранения NSString в NSUserDefaults выглядит корректно и должен перезаписывать любое значение, уже сохраненное для ключа "url". Возможно, есть ошибка в том, как вы читаете это значение в другом представлении? Не могли бы вы опубликовать свой код со следующего контроллера представления?

Исходя из вашего нового кода, если вы сохраняете второй контроллер представления, вам может потребоваться поместить ваш код в viewWillAppear, а не в viewDidLoad.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...