【问题标题】:UIApplication sharedApplication keeps executing when going back to the app and relaunchingUIApplication sharedApplication 在返回应用程序并重新启动时继续执行
【发布时间】:2013-01-15 16:42:11
【问题描述】:

以下代码可以正常工作,但是当我返回我的应用程序时,它会继续执行以下代码,但我不知道为什么以及如何停止它。 我认为它只发生在 ios5.0 中: 应用流程 - rootviewcontroller -> mainviewcontroller ->webview

以下代码在mainviewcontroller中webview的shouldstartloadrequest方法中调用

@property (readwrite, retain) UIWebView *_loginWebView;
...
..
- (void)viewDidLoad
{
    [super viewDidLoad];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
    [_loginWebView loadRequest:requestObj];
}

//当webview收到打开url的请求时调用following

   - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
            //return no is a special case there is more code in the method which I am not showing here
           if ([[UIApplication sharedApplication] canOpenURL:myURL]) 
           {
                  [[UIApplication sharedApplication] openURL:myURL];
           }
           else
           {
                  [[UIApplication sharedApplication] openURL:[NSURL URLWithString:newPath]];
           }
           return NO;
     }
     //above is a special case

}

head 标签内容 -

<head>
<meta name="viewport" content="width=device-width,initial-scale=1" />
  <!-- iOS Stuff -->
  <link rel="apple-touch-icon" href="images/...."/>
  <meta name="apple-mobile-web-app-capable" content="yes" />
  <link rel="shortcut icon" href="favicon.ico" />
  <script async="async" src="https://......."></script>
  <script type="text/javascript">
..........
  </script>
</head>

【问题讨论】:

  • 这段代码在哪里被调用?什么方法?
  • 应该启动loadrequest方法
  • 好吧,通过阅读两个可用的答案,我无法理解您的问题。您不希望每次您的应用程序进入前台时都刷新 web 视图,对吗?我要说的是,您可以获得一些可以在 webview:shouldStartLoadRequest: 上检查的控制标志,并决定是否要加载它。事实是我们不知道为什么要调用它,也许这就是它的行为。如果是这样,你只需要绕过它。如果这看起来完全不对,那么也许我什么都不懂。
  • 可能是我用错了方式 - 试试这个 - *.com/questions/14491584/…

标签: ios uiapplicationdelegate


【解决方案1】:

myURL 是否在标题中设置了元刷新?如果网页正在重新加载,则会调用此方法。如果有重定向,它也会被调用。

【讨论】:

  • 不,但这有什么关系?因为它只发生3次。查看流程 -> myapp 正在运行 - 打开第二个应用程序 - 现在应用程序在后台运行 - 按 home 键 - 再次打开 myapp - 它直接进入第二个应用程序
  • 您需要显示更多代码。显示整个方法以及调用该方法的内容(是否在 viewDidAppear 中?applicationDidBecomeActive?)
  • 这是一个标准的 webview 委托
  • 你能显示你正在加载的网站的 html 的 标签吗?
  • 另外,你为什么在 viewDidLoad 中调用你的 AppDelegate,更糟糕的是,你为什么将变量设置为 nil?
【解决方案2】:

如果我理解你的问题,问题是

  1. 启动你的应用程序,进入mainViewController,视图加载后,它会让iOS在另一个应用程序中打开一个url。
  2. 打开了另一个应用程序,当您返回到您的应用程序时,Web 视图会自动重新加载 url。

所以,问题是为什么 webview 会自动重新加载 url。

从上面的代码来看,它喜欢不需要使用web view,因为delegate总是返回No,并且做一些其他的事情。

我不知道为什么现在会发生这种情况,如果可以,请删除困扰此的 web 视图。

这个答案将被删除。

【讨论】:

  • 感谢 wubao 这也是我的想法,但是第二次 viewidload 甚至没有被调用,当我回到应用程序时,它直接点击了 shouldstartloadwithrequest
  • 我已经尝试过 C 但没有运气,我有一个使用 nsnotification 的临时解决方案 - UIApplicationWillEnterForegroundNotification 但仍在寻找更好的解决方案
  • return no 是一种特殊情况,方法中有更多代码,我没有在这里展示
  • 嘿,你能重新发布你的 A、B、C
【解决方案3】:

这是 IOS 5.0 的一个错误,如果您在应用返回前台时返回 web 视图,它会刷新它......就像 safari 一样......

但苹果在 IOS 6.0 中修复了这个错误

所以对此我们无能为力。

【讨论】:

    最近更新 更多