我正在尝试从不同的类(即NSObject类)调用performSegueWithIdentifier,并且收到此错误:
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:
'Receiver (<DerinlikView: 0x95b1ac0>) has no segue with identifier 'DerinlikToPali''
我的代码是:
Class1(NSObject):
DerinlikView *derinlik = [DerinlikView alloc];
[derinlik performSegue];
Class2(UIViewController):
- (void) performSegue
{
[self performSegueWithIdentifier:@"DerinlikToPali" sender:self];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ( [[segue identifier] isEqualToString:@"DerinlikToPali"] )
{
Palinolojik *pali = segue.destinationViewController;
}
}
最佳答案
我相信您的故事板或故事没有错,没错。
问题一定是这条线=
DerinlikView *derinlik = [DerinlikView alloc];
当为Class2分配新的viewcontroller指针时,它找不到与视图连接的segue。
一种解决方案是将已启动的Class2的指针传递给NSObject类。
在您的class1.h中:
@interface Class1 : NSObject
{
Class2 *viewController;
}
@property (nonatomic,strong) Class2 *viewController;
在class1.m
@synthesize viewController;
[self.viewController performSegue];
在class2.m中:
Class1 *callNsObject= [[Class1 alloc] init];
UIViewController *currentVC=self;//this is the part you need the pass current viewcontrollers pointer to your nsobject class depends on your project thee are multiple ways of doing it.
callNsObject.viewController=currentVC;
重要提示:我不知道您的Class2视图控制器的层次结构,因此在
UIViewController *currentVC=self;
行中,您必须将self
更改为当前的视图控制器指针。例如,如果它是基于导航的应用程序,则可以通过以下方式获取当前的视图控制器:
UIViewController *currentVC = self.navigationController.visibleViewController;
我也假设您在调用Class1方法之前将Class2的视图推入堆栈
关于ios - 从另一个类进行表演,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15478185/