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

时间:2015-03-11 04:49:18

标签: ios objective-c exception uinavigationcontroller segue

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

在我的FirstViewController.h文件中:

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

 @interface FirstViewController : UIViewController<UITableViewDataSource, UITableViewDelegate>

 @end

在我的FirstViewController.m文件中:

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
     //if ([segue.identifier isEqualToString:@"detail"]) {
         DetailViewController *vc = (DetailViewController *)[segue destinationViewController];
         vc.nameStr = @"Nuibb";
     //}
 }

在我的DetailViewController.h文件中:

#import <UIKit/UIKit.h>

@interface DetailViewController : UIViewController
@property (nonatomic, strong) NSString *nameStr;
@end

在我的DetailViewController.m文件中:

#import "DetailViewController.h"

@interface DetailViewController ()
@property (weak, nonatomic) IBOutlet UILabel *label;

@end

@implementation DetailViewController
@synthesize nameStr;
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.label.text = nameStr;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

我在日志中收到此错误消息 -

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'

4 个答案:

答案 0 :(得分:1)

您可以访问以下视图

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

希望它对你有所帮助......

答案 1 :(得分:1)

V1(segue name = xyz) - &gt; NavController - &gt;(ROOT)VC2

在你的vc1的didselectforRowAtIndexPath或任何其他Action方法中写下这段代码。

[self performSegueWithIdentifire:@"xyz"];

然后覆盖方法 -

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
 if ([segue.identifier isEqualToString:@"xyz"]) {
     DetailViewController *vc = (DetailViewController *)[segue destinationViewController];
     vc.nameStr = @"Nuibb";
 }
}

Inside DetailViewController.h首先声明一个属性。

@property(nonatomic,strong)NSString *nameStr;

答案 2 :(得分:1)

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

enter image description here

假设您的NewsTVC是您要显示的第一个视图控制器,请删除故事板中的导航视图控制器。选择NewsTVC,转到XCode工具栏并选择“Editor - &gt; Embed In - &gt; Navigation Controller”。

enter image description here

将创建一个导航控制器,它将进入您的NewsTVC。确保为新的导航控制器选择“是初始视图控制器”,并在NewsTVC原型单元和DetailVC之间拖动一个新的segue。这应该组织你的堆栈,以便segue正常运行。

enter image description here

答案 3 :(得分:0)

tableView didSelectRowAtIndex根据您的情节提要工具UINavigationController navigationControllernameStr没有任何名为detailViewController的属性

您必须直接UINavigationController。由于{{1}}无法在导航中推送。