Настройка NSURL в другом представлении. Значение равно нулю в текущем представлении - PullRequest
0 голосов
/ 02 мая 2011

Полагаю, моя ошибка очень проста, но, увы, вот в чем проблема.

В данный момент я пытаюсь установить свой NSURL с помощью этого блока из ViewControllerB

-(IBAction)changeUrl:(id)sender{

    globalURL = [NSURL URLWithString:
                  @"http://secretUrl.fileExstension"];

    viewControllerA *viewA = [[viewControllerA alloc] initWithNibName:@"viewControllerA" bundle:nil];

    viewA.globalURL = [[NSURL alloc] init];
    viewA.globalURL = globalURL;

    [viewA.globalURL release];



}

А между тем в viewControllerA я это делаю.

if (globalURL == nil) {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"LOL NSURL IS NIL!"  
                                                   delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];
    [alert release];

}
else
{

    // initates the request with set NSURL

}

Таким образом, основная проблема заключается в том, что NSURL неправильно сохраняет свое значение при передаче между представлениями.

Есть мысли?

Ответы [ 4 ]

1 голос
/ 02 мая 2011
-(IBAction)changeUrl:(id)sender{

globalURL = [NSURL URLWithString:
              @"http://secretUrl.fileExstension"];

viewControllerA *viewA = [[viewControllerA alloc] initWithNibName:@"viewControllerA" bundle:nil];



// viewA.globalURL = [[NSURL alloc] init]; //allocate this init method for viewcontrollerA
viewA.globalURL = globalURL;

   // [viewA.globalURL release]; // Dont release here.



}
1 голос
/ 02 мая 2011

Вы не должны выпускать свой [viewA.globalURL release] Я предполагаю, что у вашего globalURL есть свойство retain.Ваша локальная переменная является объектом с автоматическим освобождением, и, следовательно, вам не нужно раскрывать ее.При этом вы уменьшаете количество ссылок до 0, и, следовательно, значение теряется.

1 голос
/ 02 мая 2011

Похоже, что вы создаете ViewControllerA внутри ViewControllerB.Это твое намерение?Если ваша цель состоит в том, чтобы общаться с уже существующим ViewControllerA, то вы не совсем правильно об этом думаете.Обычно я добивался такого рода вещей, когда все мои контроллеры представления имели общего родителя (например, делегат приложения), а затем передавали друг другу сообщения через этого общего родителя.

1 голос
/ 02 мая 2011
[viewA.globalURL release];

Я думаю, что приведенная выше строка вызывает проблемы.

...