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

标签 ios objective-c exception uinavigationcontroller segue

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

在我的 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'

最佳答案

您在任何应用程序中只需要一个导航 Controller ,它会在启动时加载并为您处理整个 View Controller 堆栈。它需要是 Root View Controller ,并选中“是初始 View Controller ”框(在属性检查器下, View Controller 下)以使其开始箭头指向 View 的左侧。

enter image description here

假设您的 NewsTVC 是您要显示的第一个 View Controller ,删除 Storyboard中的导航 View Controller 。选择 NewsTVC,转到 XCode 工具栏并选择“编辑器 --> 嵌入 --> 导航 Controller ”。

enter image description here

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

enter image description here

关于ios - 由于发送到 VC 的无法识别的选择器导致应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28978774/

相关文章:

iphone - 在服务器端从 iPhone 验证 Twitter 登录

objective-c - Objective-C 中的 block 真的有用吗?它们的效用是什么?

objective-c - 如何居中 NSSegmentedControl

c++ - 访问冲突读取位置 0xCDCDCDD1

linux - 外部程序中引起SIGSEGV的指令地址

ios - 按下主页按钮后,录音机滚轮动画不起作用

ios - Xcode 13.2 中为 iOS 13 宣布的 Swift Concurrency - 他们是如何实现这一目标的?

ios - Objective-C:使用 UNUserNotificationCenter 设置计时器以显示提醒

java - 实现基于注解的Spring AspectJ (JavaConfig)

ios - 无法使用适用于 IOS 的 facebook sdk 获取电子邮件地址