Значения IOS, переданные в представление, потеряны или забыты

#objective-c #ios #variables

#objective-c #iOS #переменные

Вопрос:

Это мое первое приложение, и на самом деле оно даже не полностью мое, а скорее предполагает переработку существующего приложения для добавления функциональности.

Это включает в себя канал JSON, который я успешно считываю, а затем пытаюсь передать значение URL-адреса в представление. Вот код из моего делегата приложения, который успешно запускается после считывания фида:

 - (void)JSONFetch:(MYJSONFetch *)fetch gotTheCollection:(id)collection 
{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

    self.testViewController.feedURL = [NSURL URLWithString:[collection objectForKey:@"Listings"]];

    [JSONFetch release];
    JSONFetch = nil;
}
  

Затем в моем testViewController у меня есть этот метод viewDidLoad:

 - (void)viewDidLoad {
   [super viewDidLoad];


    if(self.feedURL)
    {
        [self startDownload];
    }
}
  

Несмотря на то, что при отладке метод gotTheCollection передает значение в feedURL представления, затем происходит сбой при проверке if (self feedURL) в представлении, и, таким образом, представление никогда не заполняется.

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

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

ОБНОВЛЕНИЕ: определение FeedURL следует в файле H:

 NSURL *feedURL;
  

затем

 @property (nonatomic, retain) NSURL *feedURL;
  

затем в файле M:

 @synthesize feedURL;
  

Спасибо за помощь, ребята, я, наконец, решил просто перезапустить все обновление, поскольку проект превратился в беспорядок из переработанного кода, и я не мог быть уверен, что сработало, а что нет. В результате на этот вопрос нет четкого ответа, но я полагаю, что Фрэнкс, вероятно, был самым близким, поэтому я отмечу это как ответ.

Комментарии:

1. Есть несколько вещей, на которые нужно обратить внимание: 1) Может ли testViewController.feedURL сохранить то, что на нем установлено 2) один и тот же экземпляр testViewController переносится в представление, чтобы его viewDidLoad мог получить доступ к тому, что устанавливается в его feedURL?

2. Я обновил вопрос определением feedURL, оно находится в файле H M с множеством других объявлений, поэтому я опубликовал только соответствующие части. Ошибок не возникает, поэтому я должен предположить, что feedURL настроен нормально.

Ответ №1:

NSURL автоматически выпускается, вам нужно будет сохранить его самостоятельно

Назначьте NSURL для feedURL, например

 self.testViewController.feedURL = [[NSURL URLWithString:[collection objectForKey:@"Listings"]] retain];
  

Это также будет означать, что вам придется освободить его самостоятельно.