[英]iOS - Error : unrecognized selector sent to instance in PrepareForSegue:
我想在控制器之间传递数据,但出现此错误,并且在这里被阻止:
[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);
}}
在运行时检查VC的实际类型是什么。 看起来您投错了类型。
要在运行时检查实型,请在VC.uID = test;
上设置断点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];
搜索目的地是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);
}}
这是我在segue之间传递managedObjectContext的方法
在您将传递数据的类中,使用prepareForSegue调用。 (假设该类具有一个名为_managedObjectContext的变量,可以将其传递给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;
这样做(具有合成功能)是调用setManagedObjectContext和getManagedObjectContext。 在即将开始搜索时,我检查以确保destinationController将“响应”此方法,如果这样,则设置数据。
明确?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.