Выполнение функции сразу после загрузки представления, iphone

Я создаю приложение с вкладками. Одна из вкладок предназначена для RSS-канала, который представляет собой навигационное приложение. но когда я нажимаю кнопку «летучая мышь» на вкладке, для загрузки вида этой вкладки требуется некоторое время. Это связано с тем, что приложение ожидает загрузки фида с сервера. Есть ли способ загрузить представление до того, как произойдет загрузка этого канала. На данный момент я даю запрос в методе viewDidLoad. Вот что создает проблему. В какую часть я должен переместить код, чтобы представление загружалось мгновенно при нажатии кнопки на вкладке.


person Nithin    schedule 05.03.2010    source источник
comment
вам следует сосредоточиться на том, чтобы сделать ваши сокеты неблокирующими/асинхронными. Поэтому вместо этого вы отображаете индикатор загрузки, когда загружаете RSS-канал. И отображать только после загрузки.   -  person peterp    schedule 05.03.2010
comment
У меня 3 панели вкладок, 2 простых приложения и 3-е, вот это. После нажатия на 3-ю вкладку представление по-прежнему остается предыдущим приложением, пока канал не будет загружен, это вызывает у меня проблему. И, конечно, я пытаюсь сделать это именно так, как вы предложили, но это можно сделать только тогда, когда представление загружено.   -  person Nithin    schedule 05.03.2010


Ответы (3)


Я рекомендую эту замечательную статью на эту тему в iCodeBlog, это очень элегантный способ сделать это. Если вы отправляете загрузку rss-канала как NSOperation, это будет происходить в фоновом режиме, не блокируя ваш основной поток.

person Zoran Simic    schedule 05.03.2010
comment
есть ли другой метод, кроме NSOperation? - person Nithin; 05.03.2010
comment
есть ли причина, по которой рекомендуемый способ сделать это не сработает для вас? - person deanWombourne; 05.03.2010
comment
приведенный здесь учебник загружает ленту нажатием кнопки, тогда как мне нужно загружать ее автоматически.. - person Nithin; 05.03.2010
comment
Загрузка запускается вызовом loadData - это не обязательно должно быть с кнопки, просто вызывайте ее, когда хотите - т.е. в вашем делегате приложения просто вызовите [self loadData]; ? - person deanWombourne; 05.03.2010
comment
Да, это можно вызвать где угодно, по нажатию кнопки или автоматически, решать вам. Вы можете сделать это в своей функции «loadData», «viewDidLoad» или даже в «viewWillAppear». - person Zoran Simic; 05.03.2010
comment
Помимо NSOperation, есть и другие способы, но я нашел способ NSOperation очень элегантным и простым. Вы сказали, что часть проблемы заключается в том, что для загрузки представления этой вкладки требуется некоторое время. Похоже, вам нужно выполнить длительную операцию загрузки в отдельном потоке. Я думаю, что использование метода NSOperation на сегодняшний день является самым простым для вас. - person Zoran Simic; 05.03.2010

использовать:

[self performSelector:@selector(performRSS:) withObject:<nil afterDelay:0.3f];

or

[NSThread detachNewThreadSelector:@selector(performRSS:) toTarget:self withObject:nil];

и поместите код, связанный с RSS-каналом, в отдельную функцию с именем «performRSS».

person Manjunath    schedule 08.03.2010

Я также думаю, что проблема больше в том, что вы не используете HTTP-запрос асинхронно (как рекомендует Apple). См. этот документ. http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html

Это работало для меня в моих приложениях.

person bartvdpoel    schedule 05.03.2010