AppDelegate - 发送到实例的无法识别的选择器

时间:2013-09-03 11:42:46

标签: ios objective-c cordova

我是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;

}

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

您似乎应该将应用程序委托从基类转换为项目中的委托。例如,如果此行导致崩溃

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

并且您的应用程序委托例如是MyAppDelegate,然后只需添加强制转换

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

当然,如果您自己的应用程序委托实现此方法。