Ios 由于无法识别发送给VC的选择器,应用程序崩溃

Ios 由于无法识别发送给VC的选择器,应用程序崩溃,ios,objective-c,exception,uinavigationcontroller,segue,Ios,Objective C,Exception,Uinavigationcontroller,Segue,由于使用segue发送的选择器无法识别,我的应用程序崩溃。我知道这是stackoverflow中的一个常见问题。我尝试了所有的解决办法,但都没有成功。我想我错过了什么。我当前的项目会引发此异常,但具有相同代码的新项目不会引发任何异常。为什么?我尝试像下面的代码片段一样使用segue将数据从FirstViewController传递到DetailViewController 在我的FirstViewController.h文件中: #import <UIKit/UIKit.h> #

由于使用segue发送的选择器无法识别,我的应用程序崩溃。我知道这是stackoverflow中的一个常见问题。我尝试了所有的解决办法,但都没有成功。我想我错过了什么。我当前的项目会引发此异常,但具有相同代码的新项目不会引发任何异常。为什么?我尝试像下面的代码片段一样使用segue将数据从FirstViewController传递到DetailViewController

在我的FirstViewController.h文件中:

 #import <UIKit/UIKit.h>
 #import "DetailViewController.h"

 @interface FirstViewController : UIViewController<UITableViewDataSource, UITableViewDelegate>

 @end
#import <UIKit/UIKit.h>

@interface DetailViewController : UIViewController
@property (nonatomic, strong) NSString *nameStr;
@end
在my DetailViewController.h文件中:

 #import <UIKit/UIKit.h>
 #import "DetailViewController.h"

 @interface FirstViewController : UIViewController<UITableViewDataSource, UITableViewDelegate>

 @end
#import <UIKit/UIKit.h>

@interface DetailViewController : UIViewController
@property (nonatomic, strong) NSString *nameStr;
@end
我在日志中收到了这个错误消息-

2015-03-11 10:27:24.145 bdipo[1185:18722] -[UINavigationController setNameStr:]: unrecognized selector sent to instance 0x7fe928dad8c0
2015-03-11 10:27:24.147 bdipo[1185:18722] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UINavigationController setNameStr:]: unrecognized selector sent to instance 0x7fe928dad8c0'

您可以访问您的视图,如下所示

DetailViewController *detailVC =
        [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];//modify this identifier name as per your StoryBoardIDentifier for detailview at storyboard..
detailVC.nameStr=@"Nuibb";
[self.navigationController pushViewController:detailVC animated:NO];//if you want to push to detail view from first view

希望它能帮助您……

您可以访问以下视图

DetailViewController *detailVC =
        [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];//modify this identifier name as per your StoryBoardIDentifier for detailview at storyboard..
detailVC.nameStr=@"Nuibb";
[self.navigationController pushViewController:detailVC animated:NO];//if you want to push to detail view from first view

希望它能帮助您……

您可以访问以下视图

DetailViewController *detailVC =
        [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];//modify this identifier name as per your StoryBoardIDentifier for detailview at storyboard..
detailVC.nameStr=@"Nuibb";
[self.navigationController pushViewController:detailVC animated:NO];//if you want to push to detail view from first view

希望它能帮助您……

您可以访问以下视图

DetailViewController *detailVC =
        [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];//modify this identifier name as per your StoryBoardIDentifier for detailview at storyboard..
detailVC.nameStr=@"Nuibb";
[self.navigationController pushViewController:detailVC animated:NO];//if you want to push to detail view from first view
希望它能帮助您…

V1(segue name=xyz)-->NavController-->(ROOT)VC2

在vc1的didselectforRowAtIndexPath或任何其他操作方法中编写此代码

[self performSegueWithIdentifire:@"xyz"];
然后重写该方法-

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
 if ([segue.identifier isEqualToString:@"xyz"]) {
     DetailViewController *vc = (DetailViewController *)[segue destinationViewController];
     vc.nameStr = @"Nuibb";
 }
}
在DetailViewController.h内部,首先声明一个属性

@property(nonatomic,strong)NSString *nameStr;
V1(segue name=xyz)-->NavController-->(ROOT)VC2

在vc1的didselectforRowAtIndexPath或任何其他操作方法中编写此代码

[self performSegueWithIdentifire:@"xyz"];
然后重写该方法-

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
 if ([segue.identifier isEqualToString:@"xyz"]) {
     DetailViewController *vc = (DetailViewController *)[segue destinationViewController];
     vc.nameStr = @"Nuibb";
 }
}
在DetailViewController.h内部,首先声明一个属性

@property(nonatomic,strong)NSString *nameStr;
V1(segue name=xyz)-->NavController-->(ROOT)VC2

在vc1的didselectforRowAtIndexPath或任何其他操作方法中编写此代码

[self performSegueWithIdentifire:@"xyz"];
然后重写该方法-

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
 if ([segue.identifier isEqualToString:@"xyz"]) {
     DetailViewController *vc = (DetailViewController *)[segue destinationViewController];
     vc.nameStr = @"Nuibb";
 }
}
在DetailViewController.h内部,首先声明一个属性

@property(nonatomic,strong)NSString *nameStr;
V1(segue name=xyz)-->NavController-->(ROOT)VC2

在vc1的didselectforRowAtIndexPath或任何其他操作方法中编写此代码

[self performSegueWithIdentifire:@"xyz"];
然后重写该方法-

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
 if ([segue.identifier isEqualToString:@"xyz"]) {
     DetailViewController *vc = (DetailViewController *)[segue destinationViewController];
     vc.nameStr = @"Nuibb";
 }
}
在DetailViewController.h内部,首先声明一个属性

@property(nonatomic,strong)NSString *nameStr;

在启动时加载的任何应用程序中,您只需要一个导航控制器,即可为您导航整个视图控制器堆栈。它需要是根视图控制器,选中“是初始视图控制器”框(在属性检查器下,视图控制器)以使其开始箭头指向视图的左侧

假设您的NewsTVC是要显示的第一个视图控制器,请删除情节提要中的导航视图控制器。选择NewsTVC,转到XCode工具栏并选择“编辑器-->嵌入-->导航控制器”

将创建一个导航控制器,该控制器将进入您的NewsTVC。确保为新导航控制器选择了“Is Initial View Controller”,并在NewsTVC原型单元格和DetailVC之间拖动一个新的分段。这将组织堆栈,以便segue正常运行


在启动时加载的任何应用程序中,您只需要一个导航控制器,即可为您导航整个视图控制器堆栈。它需要是根视图控制器,选中“是初始视图控制器”框(在属性检查器下,视图控制器)以使其开始箭头指向视图的左侧

假设您的NewsTVC是要显示的第一个视图控制器,请删除情节提要中的导航视图控制器。选择NewsTVC,转到XCode工具栏并选择“编辑器-->嵌入-->导航控制器”

将创建一个导航控制器,该控制器将进入您的NewsTVC。确保为新导航控制器选择了“Is Initial View Controller”,并在NewsTVC原型单元格和DetailVC之间拖动一个新的分段。这将组织堆栈,以便segue正常运行


在启动时加载的任何应用程序中,您只需要一个导航控制器,即可为您导航整个视图控制器堆栈。它需要是根视图控制器,选中“是初始视图控制器”框(在属性检查器下,视图控制器)以使其开始箭头指向视图的左侧

假设您的NewsTVC是要显示的第一个视图控制器,请删除情节提要中的导航视图控制器。选择NewsTVC,转到XCode工具栏并选择“编辑器-->嵌入-->导航控制器”

将创建一个导航控制器,该控制器将进入您的NewsTVC。确保为新导航控制器选择了“Is Initial View Controller”,并在NewsTVC原型单元格和DetailVC之间拖动一个新的分段。这将组织堆栈,以便segue正常运行


在启动时加载的任何应用程序中,您只需要一个导航控制器,即可为您导航整个视图控制器堆栈。它需要是根视图控制器,选中“是初始视图控制器”框(在属性检查器下,视图控制器)以使其开始箭头指向视图的左侧

假设您的NewsTVC是要显示的第一个视图控制器,请删除情节提要中的导航视图控制器。选择NewsTVC,转到XCode工具栏并选择“编辑器-->嵌入-->导航控制器”

将创建一个导航控制器,该控制器将进入您的NewsTVC。确保为新导航控制器选择了“Is Initial View Controller”,并在NewsTVC原型单元格和DetailVC之间拖动一个新的分段。这将组织堆栈,以便segue正常运行


tableView
上的
DIDSelectRowatinex
一个
UINavigationController
是根据您的故事板进行分割的,并且您的
navigationController
没有任何名为
nameStr


您必须继续使用
detailViewController
direct。As
UINavigationController
无法在导航中按pe键。

表视图上