AppDelegate - 发送到实例的无法识别的选择器[关闭]
Posted
技术标签:
【中文标题】AppDelegate - 发送到实例的无法识别的选择器[关闭]【英文标题】:AppDelegate - unrecognized selector sent to instance [closed] 【发布时间】:2013-09-03 11:42:45 【问题描述】:我是 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 的部分,正如上面可以看到的错误中提到的。这个 sn-p 在 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;
【问题讨论】:
导致崩溃的帖子。 请参阅编辑崩溃时引用的代码。 【参考方案1】:您似乎只需将应用程序委托从基类转换为项目中的委托。例如,如果这行导致崩溃
[[[UIApplication sharedApplication] delegate] getCommandInstance: someVar];
而您的应用程序委托例如是MyAppDelegate
,那么只需添加演员表
[((MyAppDelegate*)[[UIApplication sharedApplication] delegate]) getCommandInstance: someVar];
当然,如果您自己的应用程序委托实现此方法。
【讨论】:
修复了错误!谢谢。【参考方案2】:首先你的问题不清楚,但我认为应该是
在 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;
【讨论】:
请参阅上面的编辑。 AppDelegates.m 中没有一行显示 self.window.rootViewController = self.viewController; @user2609731 - 那么你的 rootViewController 在哪里? 我好像没有。我已经按照上面的建议添加了代码,但它并没有修复错误。我可能在错误的地方添加了。我在 self.window.autoresizesSubviews = YES; 之后添加到 AppDelegate.m以上是关于AppDelegate - 发送到实例的无法识别的选择器[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
尝试获取 AppDelegate 时出现“无法识别的选择器发送到实例”错误