Xcode - presentViewController NSInvalidArgumentException:无法识别的选择器发送到实例
Posted
技术标签:
【中文标题】Xcode - presentViewController NSInvalidArgumentException:无法识别的选择器发送到实例【英文标题】:Xcode - presentViewController NSInvalidArgumentException: unrecognized selector sent to instance 【发布时间】:2016-08-05 18:22:13 【问题描述】:所以我试图通过按下按钮在应用程序中打开视图,但显示以下错误:
'NSInvalidArgumentException', reason: '-[UINavigationBar copyWithZone:]: unrecognized selector sent to instance 0x1e56aa10'
按钮按下的动作是:
-(IBAction)launchDirections:(id)sender
@autoreleasepool
if([CLLocationManager locationServicesEnabled])
if([CLLocationManager authorizationStatus]==kCLAuthorizationStatusDenied
|| [CLLocationManager authorizationStatus]==kCLAuthorizationStatusNotDetermined
|| [CLLocationManager authorizationStatus]==kCLAuthorizationStatusRestricted )
UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"App Permission Denied"
message:@"To re-enable, please go to Settings and turn on Location Service for this app."
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
else
NSLog(@"Location Services Enabled");
ontracDirectionsMapViewController *directions = [[ontracDirectionsMapViewController alloc] init];
directions.start = userLocation;
directions.end =selectedPointLocation;
//[self presentViewController:directions animated:NO completion:nil];
//[self.navigationController pushViewController:directions animated:YES];
[ self presentViewController : directions animated : YES completion : ^
NSLog ( @ "hello" );
];
此外,我已经尝试了您可以看到已被注释掉的两行:
//[self presentViewController:directions animated:NO completion:nil];
//[self.navigationController pushViewController:directions animated:YES];
不幸的是,这些没有任何区别。我是 ios 开发新手,不知道从哪里开始。
此外,应用程序中的其他地方还有一个名为 copyWithZone
的方法,但即使我完全删除它,我仍然会收到参考错误。
-(id)copyWithZone:(NSZone *)zone
ontracTableMasterViewController *copy = [[ontracTableMasterViewController alloc] init];
copy.cookieValue = self.cookieValue;
copy.dataObject = self.dataObject;
return copy;
【问题讨论】:
ontracDirectionsMapViewController
在故事板上?
@Lion 是的,我认为
有一个答案。这似乎是对的。这样做。
AFAIK:copyWithZone
是[复制](developer.apple.com/library/mac/documentation/Cocoa/Reference/…) 的协议方法,即您有一个类似于 @property ( someOther attributes, copy)
的属性...但您不能只说也就是说,您要复制的对象必须遵循/conform/adapt NSCopying
协议,否则会给您这样的错误。参见this 以及
-[MyClassName copyWithZone:] unrecognized selector sent to instance的可能重复
【参考方案1】:
如果您使用情节提要,请将情节提要标识符设置为您的 ontracTableMasterViewController
并按如下方式对其进行实例化:
ontracTableMasterViewController *oVC = (ontracTableMasterViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"YOUR_IDENTIFIER"];
oVC.start = userLocation;
oVC.end = selectedPointLocation;
[self presentViewController:oVC animated:YES completion:nil];
请检查所附图片以在情节提要中设置 YOUR_IDENTIFIER。 希望这会有所帮助!
【讨论】:
我没有设置捆绑 ID 的选项:/ 你好@jampez77 你在用什么?故事板或 .xib 或纯粹以编程方式创建 UI?【参考方案2】:好的,所以我很幸运地得到了答案!我所做的是将ontracMapViewController.h
中的以下行@property (copy, nonatomic) IBOutlet UINavigationBar *directionsNavigationBar;
更改为@property (strong, nonatomic) IBOutlet UINavigationBar *directionsNavigationBar;
这会产生以下错误,preferredInterfaceOrientationForPresentation must return a supported interface orientation!
我通过添加以下代码解决了这个问题:
-(BOOL)shouldAutorotate
return NO;
-(NSUInteger)supportedInterfaceOrientations
return UIInterfaceOrientationMaskLandscape;
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
return UIInterfaceOrientationLandscapeRight;
就像我在问题中所说的那样,我是 IOS 开发人员的新手,所以不确定首先发生了什么,但这似乎现在工作正常。不过感谢大家的帮助。
【讨论】:
以上是关于Xcode - presentViewController NSInvalidArgumentException:无法识别的选择器发送到实例的主要内容,如果未能解决你的问题,请参考以下文章