2010-04-18 7 views
0

У меня есть приложение с вкладкой и веб-просмотром. Я пытаюсь заставить приложение вернуться к URL-адресу по умолчанию каждый раз, когда пользователь удаляет панель. Сейчас я перехватываю краны и запускаю метод, однако это не влияет на мой веб-просмотр (это не загрузка страницы). Метод работает правильно при вызове из класса, но не тогда, когда он вызывается из моего делегата приложения, где я перехватываю краны.WebView не отвечает при вызове метода

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

Вот код:

Второй заголовок вид (где расположен WebView)

@interface SecondViewController : UIViewController { 
IBOutlet UIWebView *secondView; 
} 
- (void) goToPage; 

Вторая реализация вида

#import "SecondViewController.h" 
@implementation SecondViewController 
- (void)awakeFromNib 
{ 
    [self goToPage]; 
} 

- (void) goToPage 
{ 
    NSLog(@"go to page"); 
    NSString *newURL = [NSString stringWithFormat:@"http://pageurl"]; 
    [secondView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:newURL]]]; 
} 

Мое приложение делегат, где я называю класс SecondViewController метод:

#import "RedDragonAppDelegate.h" 
#import "SecondViewController.h" 

@implementation RedDragonAppDelegate 

@synthesize window; 
@synthesize rootController; 

- (void)applicationDidFinishLaunching:(UIApplication *)application {  
    // Override point for customization after application launch 
    [window addSubview:rootController.view]; 
} 

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 

    NSLog(@"didSelectViewController %d", rootController.selectedIndex); 

    SecondViewController * sv = [[SecondViewController alloc] init]; 

    if (rootController.selectedIndex == 0){ 
     //NSLog(@"if in didSelectViewController 0"); 
    } else if (rootController.selectedIndex == 1) { 
     //NSLog(@"if in didSelectViewController 1"); 
     [sv goToPage]; 
    } 
} 

Спасибо за помощь!

+0

Я предполагаю, что вы действительно видите 'go to page' в своем журнале, так что вы знаете, что вызывается' goToPage'. Являются ли исходный URL и новый URL одинаковыми? Выполняется ли вызов из 'goToPage', если вы заменили' newURL' (в 'NSURL URLWithString:') с помощью, например, '@" http://www.google.com/ "'? – Isaac

+0

haha ​​Я бы не опубликовал его, если я не проверял очевидное :) Действительно, я знаю, что функция выполняется, и я уверен, что новый URL-адрес не загружается. Я все же выяснил половину проблемы.Когда я изменил [ptr goToPage]; [self goToPage]; он начал работать, но ... мне все равно придется называть его из другого класса. Когда я создаю объект следующим образом: SecondViewController * ptr = [[SecondViewController alloc] init]; функция выполняется, однако веб-просмотр не активируется. :( – AragornSG

+0

Как установить 'secondView'? Может быть, проблема с сохранением/выпуском/автозапуском? – Isaac

ответ

1

Если я правильно понял, у вас есть экземпляр SecondViewController с secondView, связанный с экземпляром UIWebView в Interface Builder. То, что вы хотите сделать, это позвонить goToPage по этому экземпляру SecondViewController от RedDragonAppDelegate. (В частности, обратите внимание, что я говорю о экземплярах из них. - Я считаю, что это основной вопрос)

В tabBarController:didSelectViewController:, когда вы делаете SecondViewController * sv = [[SecondViewController alloc] init];, вы создаете новый экземпляр SecondViewController, и вы можете называем его метод goToPage, но sv это не то же экземпляр SecondViewController, который появляется в Interface Builder и имеет secondView, подключенные к UIWebView (то есть, когда вы создаете новый экземпляр из SecondViewController, то Ивар secondView снят с охраной и, кажется, nil, но я не знаю, что это будет nil).

То, что вы, вероятно, (*) нужно сделать, это добавить IBOutlet SecondViewController *sv; к @interface из RedDragonAppDelegate, убедитесь, что у вас есть экземпляр RedDragonAppDelegate в Interface Builder, подключить новый IBOutlet sv из RedDragonAppDelegate к экземпляру SecondViewController в Interface Builder , и удалите строку в tabBarController:didSelectViewController:, которая определяет и инициализирует sv.

(*) Я не уверен на этом, потому что я не занимаюсь iPhone, и я не знаю, как ваши различные взгляды/объекты/и т. Д. расположены в файлах XIB/NIB, но если все в одном файле XIB/NIB, я уверен, что это сработает.

+0

Исаак, ты гений! Вы нашли проблему и объяснили это решение так, как я понял (с моими ограниченными знаниями)! Держи его! :) – AragornSG

+0

Я рад, что смогу помочь. – Isaac

Смежные вопросы