Я создаю приложение с вкладками. Одна из вкладок предназначена для RSS-канала, который представляет собой навигационное приложение. но когда я нажимаю кнопку «летучая мышь» на вкладке, для загрузки вида этой вкладки требуется некоторое время. Это связано с тем, что приложение ожидает загрузки фида с сервера. Есть ли способ загрузить представление до того, как произойдет загрузка этого канала. На данный момент я даю запрос в методе viewDidLoad. Вот что создает проблему. В какую часть я должен переместить код, чтобы представление загружалось мгновенно при нажатии кнопки на вкладке.
Выполнение функции сразу после загрузки представления, iphone
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
есть ли другой метод, кроме NSOperation?
- person Nithin; 05.03.2010
есть ли причина, по которой рекомендуемый способ сделать это не сработает для вас?
- person deanWombourne; 05.03.2010
приведенный здесь учебник загружает ленту нажатием кнопки, тогда как мне нужно загружать ее автоматически..
- person Nithin; 05.03.2010
Загрузка запускается вызовом loadData - это не обязательно должно быть с кнопки, просто вызывайте ее, когда хотите - т.е. в вашем делегате приложения просто вызовите [self loadData]; ?
- person deanWombourne; 05.03.2010
Да, это можно вызвать где угодно, по нажатию кнопки или автоматически, решать вам. Вы можете сделать это в своей функции «loadData», «viewDidLoad» или даже в «viewWillAppear».
- person Zoran Simic; 05.03.2010
Помимо 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