我想在控制器之间传递数据,但是我收到了这个错误,我在这里被阻止:s
[UITabBarController setUID:]: unrecognized selector sent to instance
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NSString *test = (NSString *)sender;
if ([segue.identifier isEqualToString:@"segueno"]) {
FirstViewController *VC = (FirstViewController *)[segue destinationViewController];
VC.uID = test;
NSLog(@"%@",VC.uID);
}}
答案 0 :(得分:2)
检查运行时VC的实际类型。看起来你输错了类型。
在行VC.uID = test;
上的运行时设置断点期间检查实际类型。在调试窗口中,您应该有:
VC = (RealClass *) 0x312321312
真正的课程不是你所期望的。
最可能的原因是VC
是UITabBarController
。所以你必须替换
FirstViewController *VC = (FirstViewController *)[segue destinationViewController];
与
UITabBarController *tabBarController = (UITabBarController *)[segue destinationViewController];
// replace 1 with real index of your FirstVC
FirstViewController *VC = [[tabBarController viewControllers] objectAtIndex:1];
答案 1 :(得分:1)
segue目的地是UITabBarController。所以你需要检查viewcontrollers列表。那么基于你可以寻找uID。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NSString *test = (NSString *)sender;
if ([segue.identifier isEqualToString:@"segueno"]) {
FirstViewController *firstVC ;
UITabBarController *destinat = [segue destinationViewController];
if ([destinat isKindOfClass:[UITabBarController class]]) {
for (id listOfViewControllers in [destinat viewControllers]) {
if ([listOfViewControllers isKindOfClass:[FirstViewController class]]) {
firstVC = listOfViewControllers;
break;
}
}
}
firstVC.uID = test;
NSLog(@"%@",firstVC.uID);
}}
答案 2 :(得分:0)
以下是我在segues
之间传递managedObjectContext的方法在您将要传递数据的班级中,使用prepareForSegue调用。 (假设这个类有一个名为 _managedObjectContext 的变量,它可以传递给segue类)
来自Segue的课程:
.h文件:
@property (weak, nonatomic) NSManagedObjectContext *managedObjectContext;
.m文件:
@synthesize managedObjectContext
对@synthesize的调用将产生以下结果:
另外将以下方法添加到您的班级
// Pass on managedObjectContext
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// If the destination VC is able to take the setManagedObjectContext method the current objectContext will be passed along.
if ([segue.destinationViewController respondsToSelector:@selector(setManagedObjectContext:)]) {
[segue.destinationViewController performSelector:@selector(setManagedObjectContext:)
withObject:_managedObjectContext];
} else {
NSLog(@"Segue to controller [%@] that does not support passing managedObjectContext", [segue destinationViewController]);
}
}
然后在我的“课堂”中接收我做的数据: 在.h文件中我有
@property (weak, nonatomic) NSManagedObjectContext *managedObjectContext;
并在.m文件中我有:
@synthesize managedObjectContext;
这样做(使用syntehsiation)是一个setManagedObjectContext和getManagedObjectContext调用。在准备segue我检查以确保destinationController将“响应”此方法,如果是这样,数据设置。
清楚?