我的应用由于使用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'
答案 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)
在任何应用程序中只需要一个导航控制器,它在启动时加载,并将为您处理完整的视图控制器堆栈。它必须是根视图控制器,选中“是初始视图控制器”框(在“属性”检查器,“视图控制器”下),为其指定开始箭头指向视图的左侧。
假设您的NewsTVC是您要显示的第一个视图控制器,请删除故事板中的导航视图控制器。选择NewsTVC,转到XCode工具栏并选择“Editor - &gt; Embed In - &gt; Navigation Controller”。
将创建一个导航控制器,它将进入您的NewsTVC。确保为新的导航控制器选择“是初始视图控制器”,并在NewsTVC原型单元和DetailVC之间拖动一个新的segue。这应该组织你的堆栈,以便segue正常运行。
答案 3 :(得分:0)
在tableView
didSelectRowAtIndex
根据您的情节提要工具UINavigationController
navigationController
,nameStr
没有任何名为detailViewController
的属性
您必须直接UINavigationController
。由于{{1}}无法在导航中推送。