我正在尝试从不同的类(即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/

10-13 03:48