8

Cleaver、つまりPhoneGap/Cordovaを既存のiOSアプリケーションのコンポーネントとして使用しようとしました。私はこのステップバイステップガイドを2回実行しましたが、成功しませんでした。

私のアプリケーションはWebビューを簡単にインスタンス化でき、stringbyevaluatingjavascriptfromstringメソッドを使用してコンテンツをアプリケーションに渡すことができますが、PhoneGap API(navigator.compass, navigator.network, ...)にアクセスしようとすると、何も機能しないようです。console.log(navigator)Cordovaオブジェクトの兆候を示してconsole.logいません(Xcodeは何も出力しません。私はhttp://debug.phonegap.com/を使用しています)。イベントもトリガーされdevicereadyません。

私のhtmlファイルには、cordova-1.7.0rc1.js別のプロジェクトからコピーしたPhoneGap jsファイルが含まれています(/wwwPhoneGapをコンポーネントとして使用するとフォルダーが欠落しているため)。

私のViewController.h輸入品<Cordova/CDVViewController.h>。ここに私のViewController.m

//
//  ViewController.m
//  CordovaComponent
//

#import "ViewController.h"

@interface ViewController (){
    CDVViewController *cdvViewController ;
}
@end

@implementation ViewController

- (void)pushPhoneGap:(id)sender {

    cdvViewController = [[CDVViewController alloc] init];
    cdvViewController.wwwFolderName = @"www";
    cdvViewController.startPage = @"index.html";
    cdvViewController.view.frame = self.view.bounds;
    cdvViewController.webView.delegate = self;
    [self.navigationController pushViewController:cdvViewController animated:YES];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    UIButton * button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [button setTitle:@"Push PhoneGap view" forState:UIControlStateNormal];
    [button addTarget:self action:@selector(pushPhoneGap:) forControlEvents:UIControlEventTouchUpInside];
    button.frame = CGRectMake(60, 50, 200., 50.);
    [self.view addSubview:button];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    NSString *jsReturn = [cdvViewController.webView stringByEvaluatingJavaScriptFromString:@"setArray([1, 1, 2, 3, 5, 8, 13, 21, 34, 1]);"];
    NSLog(jsReturn);
}

@end

何が起こっているのか分かりますか?どんな助けでも大歓迎です!

4

2 に答える 2

1

さて、この問題を解決しようと何時間も試みた後、私はついに何が悪いのかを見つけました。これは物事を台無しにした行です:

cdvViewController.webView.delegate = self;

ビューコントローラのWebビューのデリゲートを単にオーバーライドすることはできません。元のデリゲートには、PhoneGapの実行を可能にするインスタンス化コードがあります。それを上書きしないでください、そしてすべてがうまくいくでしょう!

于 2012-07-03T09:34:20.403 に答える
0

コルドバを壊さずにウェブビューイベントに関する通知を受け取りたい場合は、次のような方法を試すことができます。

@interface WrappingWebViewDelegate : NSObject <UIWebViewDelegate>
    @property (nonatomic,retain) id<UIWebViewDelegate> wrappedDelegate;
@end


@implementation WrappingWebViewDelegate
    - (void)webViewDidStartLoad:(UIWebView*)theWebView {
        [self.wrappedDelegate webViewDidStartLoad: theWebView];
        // your code
    }

    // implement all other delegate methods and forward them to the wrapped delegate
    [...]
@end

このような使用法:

cdvViewController = [[CDVViewController alloc] init];
WrappingWebViewDelegate wrappingDelegate = [[WrappingWebViewDelegate alloc] init];
wrappingDelegate.wrappedDelegate = cdvViewController.webView.delegate;
cdvViewController.webView.delegate = wrappingDelegate;

私はこれをテストしていませんので、注意する必要があります。

于 2014-04-03T11:15:27.800 に答える