在Settings.bundle
中,我有一个带有标识符url_preference
的文本输入。
使用ViewController.h
,ViewController.m
和我的故事板我设置UIWebView
,显示设置中的网址:
- (void) updateBrowser {
NSString *fullURL = [[NSUserDefaults standardUserDefaults] stringForKey:@"url_preference"];
NSURL *url = [NSURL URLWithString:fullURL];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[_EmbeddedBrowser loadRequest:requestObj];
}
这很有效。
但是,当更改“设置”中的网址时,UIWebView
不会更新以反映新网址。
通过禁止应用在后台运行,解决了未反映更新网址的问题。但是,出现了一个新问题:如果“设置”中的URL保持不变,则不会保留会话。 UIWebView
只应在url_preference
发生更改后才会更新。
我一直试图在applicationWillEnterForeground
中使用AppDelegate.m
强制UIWebView
重新加载,但是我遇到了麻烦。
在ViewController中,我可以运行:
- (void)viewDidLoad {
[self updateBrowser];
}
但是当我尝试在App Delegate中运行相同的东西时它不会更新:
- (void)applicationWillEnterForeground:(UIApplication *)application
{
ViewController *vc = [[ViewController alloc]init];
[vc updateBrowser];
}
(我还在- (void) updateBrowser;
中添加了ViewController.h
,在#import "ViewController.h"
中添加了AppDelegate.m
谢谢。
答案 0 :(得分:2)
- (void)viewDidLoad
{
[self updateBrowser];
[super viewDidLoad];
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self
selector:@selector(defaultsChanged:)
name:NSUserDefaultsDidChangeNotification
object:nil];
}
- (void)defaultsChanged:(NSNotification *)notification {
[self updateBrowser];
}
- (void) updateBrowser {
NSString *fullURL = [[NSUserDefaults standardUserDefaults] stringForKey:@"url_preference"];
NSURL *url = [NSURL URLWithString:fullURL];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[_EmbeddedBrowser loadRequest:requestObj];
}
幸运的是,没有必要在这种情况下使用AppDelegate。实际上有一个通知,您可以在默认设置更改时收听。您必须将ViewController设置为观察者,并在每次发送NSUserDefaultsDidChangeNotification时执行一个函数。每次在设置中更改应用程序的默认设置时,都会自动发生此通知。这样,只要设置发生变化,您就不必在每次应用程序到达前台时刷新。