1

私は iOS プログラミングの初心者で、Cordova アプリケーションを iOS に [すばやく] 移植する必要があります。here で見つかったプロジェクトを複製しようとしたときに、次のエラーが発生しました。

何が原因で、コードを深く掘り下げずに解決するにはどうすればよいですか? (もし可能なら)

AppDelegate getCommandInstance:]: unrecognized selector sent to instance <instance>
ebKit discarded an uncaught exception in the     
webView:decidePolicyForNavigationAction:request:frame:decisionListener: delegate:   
<NSInvalidArgumentException> -[AppDelegate getCommandInstance:]: unrecognized selector 
sent to instance <instance>

ありがとう。

[編集]

AppDelegate.h には以下の行があります

@property (nonatomic, retain) IBOutlet UIWindow* window;
@property (nonatomic, retain) IBOutlet CDVViewController* viewController;

AppDelegate.m は

CGRect screenBounds = [[UIScreen mainScreen] bounds];
self.window = [[[UIWindow alloc] initWithFrame:screenBounds] autorelease];
self.window.autoresizesSubviews = YES;

[self.window addSubview:self.viewController.view];
[self.window makeKeyAndVisible];

[編集]

これは、上記のエラーに記載されている getCommandInstance を参照するコードの唯一の部分です。このスニペットは SQLitePlugin.m にあります。

-(CDVPlugin*) initWithWebView:(UIWebView*)theWebView
{
self = (SQLitePlugin*)[super initWithWebView:theWebView];
if (self) {
    openDBs = [NSMutableDictionary dictionaryWithCapacity:0];
    [openDBs retain];

    CDVFile* pgFile = [[self appDelegate] getCommandInstance: @"org.apache.cordova.file"];
    NSString *docs = [pgFile appDocsPath];
    [self setAppDocsPath:docs];

}
return self;

}

4

2 に答える 2

0

最初にあなたの質問は不明確ですが、それはあるべきだと思います

AppDelegate.hについて

@property (nonatomic, strong) UINavigationController *navigationController;

AppDelegate.m ではわかりませんが、次のように書いている可能性があります

self.window.rootViewController = self.viewController;

間違っているので、このように変更する必要があります

    self.navigationController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
    self.window.rootViewController = self.navigationController;
于 2013-09-03T11:46:51.113 に答える
0

アプリケーションデリゲートを基本クラスからプロジェクトのデリゲートにキャストする必要があるようです。たとえば、この行がクラッシュを引き起こす場合

[[[UIApplication sharedApplication] delegate] getCommandInstance: someVar];

アプリケーションのデリゲートは、たとえば の場合、MyAppDelegateキャストを追加するだけです

[((MyAppDelegate*)[[UIApplication sharedApplication] delegate]) getCommandInstance: someVar];

もちろん、独自のアプリケーション デリゲートの場合は、このメソッドを実装します。

于 2013-09-03T11:48:23.340 に答える