0

たくさんのビューコントローラーを備えた通常のアプリがあります。たとえば、viewControllerA、viewControllerB、viewControllerWebなどです。

「viewControllerWeb」はUIWebViewDelegateであり、UIWebViewが含まれています。viewControllerAまたはviewCOntrollerBを操作しているときでも、メソッドを呼び出したいと思います。(のような方法[webview stringByEvaluatingJavaScriptFromString:]

だから本質的には、どういうわけか「viewControllerWeb」をバックグラウンドで開いてほしいようです。誰かがこのようなことを達成する方法を知っていますか?私はこれを間違った方法で考えていますか?

皆さんが私を助けてくれることを願っています!どうもありがとう!

4

2 に答える 2

2

WebViewControllerが作成されたVCからこれらのメソッドを呼び出したい場合は、webViewControllerをグローバル変数にすることで簡単に呼び出すことができます。

外部のVCからアクセスする場合は、WebViewControllerをシングルトンにして、アプリ内のどこからでもアクセスできるようにすることができます。このようなことは次のようになります。

static WebViewController *sharedController = nil;

+ (WebViewController*)sharedController {

    if(sharedController == nil)
        sharedController = [[WebViewController alloc] initWithNibName:@"WebViewController" bundle:[NSBundle mainBundle]];

    return sharedController;
}

これにより、どこからでもWebViewControllerにアクセスできるようになります。

[[WebViewController sharedController] stringByEvaluatingJavaScript...]

編集:RyanRがコメントで指摘したように、これにより、明示的にリリースするまでViewControllerが保持されることは明らかです。シングルトンのよくある間違いは、シングルトンを忘れて、決してリリースしないことです。必ずリリースしてください。

于 2011-07-17T02:55:58.317 に答える
1

ViewControllerのコピーを保持するべきではありません。機能を共有したい場合は、それをシングルトンに抽象化します。

于 2011-07-17T14:36:47.743 に答える