标签: uistoryboardsegue

NSInvalidArgumentException原因Receiver没有带标识符的segue

我有问题,我一直坐着.我有一个UIViewController List和一个UIViewController Login.在Login我有一个按钮"Done",同一个UIViewController上的另一个隐藏按钮有一个segue到List(Type:push).我在xcode的接口构建器中为它命名了一个名为"LoginToList"的标识符.现在从另一个类(一个运行的类Login是活动控制器)我调用:

[[Login sharedLogin] performSegueWithIdentifier:@"LoginToList"];
Run Code Online (Sandbox Code Playgroud)

所述Login类显然有与标识符的SEGUE"LoginToList"

但我一直在:

 'NSInvalidArgumentException', reason: 'Receiver (<Login: 0x6d79d90>) has no segue with identifier 'LoginToList''
Run Code Online (Sandbox Code Playgroud)

+ (id) sharedLogin看起来像这样:

+ (id) sharedLogin {
    static Login *sharedLogin = nil;

    @synchronized(self) {
        if (sharedLogin == nil) {
            sharedLogin = [[self alloc] init];
        }

        return sharedLogin;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果有人知道为什么会这么说,我会很高兴听到它!:D我不知道我是否遗漏了一些愚蠢的东西,但我无法发现它:(

编辑:我已经在界面生成器中创建了一个segue(ctrl +点击拖动LoginList),使用UIViewControllers自己(Login&List).然后我命名了segue "LoginToList",换句话说我给了它标识符.我点击了segue,在右上角有一个我用过的"Identifier"字段.

我仍然得到错误说Login没有带标识符的segue …

xcode objective-c segue uistoryboardsegue

13
推荐指数
1
解决办法
8166
查看次数

警告:尝试显示其视图不在窗口层次结构中!使用已识别的segue时

我知道还有很多其他问题,但它们并没有完全解释我的问题.

当按下相关按钮时,我通过识别的故事板自定义segue 从我的初始视图控制器SAGViewController转到另一个视图控制器SAGHomeScreenViewController:

-(IBAction)goNewGame{
    [self performSegueWithIdentifier:@"startHomeSegue" sender:self];
}
Run Code Online (Sandbox Code Playgroud)

它工作正常,但我仍然收到警告:

警告:尝试在SAGViewController上显示SAGHomeScreenViewController:0xc43b800:0xbaaa9f0,其视图不在窗口层次结构中!

如果我注释掉了performSegueWithIndentifer,segue仍然有效,但我没有得到警告:

-(IBAction)goNewGame{
    //[self performSegueWithIdentifier:@"startHomeSegue" sender:self];
}
Run Code Online (Sandbox Code Playgroud)

为什么?请注意,我没有导航控制器.
任何建议都会受到赞赏,segue仍然有效,但我不想要任何我不明白的警告!

objective-c uiviewcontroller ios uistoryboardsegue

13
推荐指数
1
解决办法
1万
查看次数

如何在XCode故事板中删除segue?

目前,我的故事板中有两个段落.但是,我需要删除Storyboard中的一个segue.有没有办法通过XCode故事板来做到这一点?

xcode ios xcode-storyboard uistoryboardsegue

13
推荐指数
1
解决办法
4598
查看次数

禁用segue动画

我想在我的故事板中显示(例如推送)segues,以连接我的viewcontrollers和我的导航控制器.然后,viewcontrollers上的导航栏将正确显示.例如:使用show detail或present modaly,导航栏将消失

但我不想要segue动画.Xcode发出如下警告:"在iOS 9.0之前禁用segue动画"

我想要iOS 7.0或8.0的部署目标

我怎么解决这个问题?

提前致谢.

ios uistoryboard segue uistoryboardsegue swift

13
推荐指数
3
解决办法
9500
查看次数

使用自适应popover segue并将目标包装在导航控制器中会导致内存泄漏

假设我有一个视图控制器,我在点击按钮时使用自适应popover segue显示.现在在某些情况下,我可能想要将目标视图控制器包装在(例如)导航控制器中.所以,我将自己设置为委托popoverPresentationController的委托,并实现该presentationController:viewControllerForAdaptivePresentationStyle:方法.


但我注意到一些奇怪的事情:在某些情况下,对象没有被解除分配.如果,在前面提到的方法中,我将呈现的viewcontroller包装在导航控制器中:

func presentationController(controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? {
    return UINavigationController(rootViewController: controller.presentedViewController)
}
Run Code Online (Sandbox Code Playgroud)

在解除时,导航控制器被取消分配,但是呈现的视图控制器仍然被分配.

相反,如果我通过自适应popover segue直接显示导航控制器,那么在解除导航控制器和它包含的细节控制器时,将正确释放.


出于演示目的,请参考此测试项目(Swift):https://github.com/djbe/AdaptivePopoverSegue-Test

动态包装在导航控制器中时我们得到的结果(点击"弹出,导航自动添加"按钮):

--- Showing details ---
Loaded details view controller (0x7fab31632b70)
Loaded navigation controller (0x7fab32815600)
Deinit navigation controller (0x7fab32815600)
Run Code Online (Sandbox Code Playgroud)

如您所见,详细信息视图控制器永远不会被释放.


我检查了文档,presentationController:viewControllerForAdaptivePresentationStyle:但没有具体提及所有权,强保留等等...我尝试使用带有分配工具的仪器,但是这个(简单)案例中有很多保留/释放我不能直接找到问题.

有没有人遇到过这个问题?或者您对如何解决这个问题有所了解?


如下面@TomSwift所述,由于控制器和segue之间的循环引用,存在一个错误.解决此问题的唯一方法是将目标控制器包装在导航控制器中,方法是在segue(自定义)的init方法中进行换行.

我已经在Github上更新了我的示例代码,以展示如何使用@Vasily提到的解决方案实现这一目标,但仍允许使用协议进行动态包装行为,而无需使用NSUserDefaults进行hacky变通办法.

popover ios uistoryboardsegue swift

13
推荐指数
1
解决办法
478
查看次数

如何延迟执行瞄准

在我的故事板中,我有一个视图作为启动画面.在这个视图中,我已经有一个像"打开应用程序"的按钮,它打开菜单视图,带有模态segue.但是我也希望屏幕自动执行segue,就像2秒后出现视图一样.

一些代码在这里:

- (void)viewDidAppear:(BOOL)animated
{
    [self performSegueWithIdentifier:@"splashScreenSegue" sender:self];
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我已经使用performSegueWithIdentifier但它立即执行.有没有办法让它延迟?

提前致谢.

iphone objective-c ios5 uistoryboard uistoryboardsegue

12
推荐指数
2
解决办法
9272
查看次数

在视图控制器之间传递变量

我正在使用此函数在Xcode 4.3中切换视图.

[self performSegueWithIdentifier:@"NextView" sender:self];
Run Code Online (Sandbox Code Playgroud)

我想在页面之间传递一些参数.我怎样才能做到这一点?

properties uiviewcontroller ios uistoryboard uistoryboardsegue

12
推荐指数
2
解决办法
3万
查看次数

如何使用在自适应故事板中关闭iPhone弹出窗口

我是iOS开发的新手,我正在尝试同时学习故事板,Swift和iOS 8的新功能.

我创建了一个非常简单的故事板,使用Popover演示文件segue来显示另一个视图.在模拟器上,如果我为iPad运行它,它按预期工作.但是,如果我为iPhone而不是弹出窗口运行它,它会在原始视图的顶部显示全屏视图.这可以; 但是,没有办法解雇它并回到原来的屏幕.

我观看了WWDC 2014视频"228 A Look inside presentation controllers",如果他们完全使用代码构建用户界面,他们可以显示一个关闭按钮.

我还看过"411界面构建器中的新功能"会话,他们说这可以在Interface Builder中完成,但他们没有显示它,承诺在实验室中展示如何做,如果有人感兴趣的话.不幸的是,我没有参加WWDC 2014,或者认识任何人.我的Google搜索也没有返回任何有用的内容.

uistoryboard uistoryboardsegue ios8

12
推荐指数
2
解决办法
8002
查看次数

添加了导航栏但没有后退按钮?

我创建了一个表视图,然后从那里开始说用户按下了一个单元格,它将转到detailItemView,但现在唯一的问题是每当用户在detailItemView中时,没有后退按钮,即使我已经嵌入了导航控制器

这是用户按下单元格后将执行segue的代码:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    // Get the new view controller using [segue destinationViewController].
    var nav = segue.destinationViewController as! UINavigationController
    var detailScene = nav.topViewController as! DetailViewController


    // Pass the selected object to the destination view controller.
    if let indexPath = self.tableView.indexPathForSelectedRow() {
        let row = Int(indexPath.row)
        detailScene.currentObject = objects?[row] as? PFObject
    }
}
Run Code Online (Sandbox Code Playgroud)

故事板的屏幕截图:

在此输入图像描述

编辑截图

在此输入图像描述

我试着在下面做出答案,但仍然没有后退按钮

另一个截图,detailView控制器没有后退按钮

在此输入图像描述

uitableview ios segue uistoryboardsegue swift

12
推荐指数
1
解决办法
2万
查看次数

Xcode,在哪里分配segue标识符

请原谅我的初学者问题.我知道我可以像这样切换到另一个屏幕(ViewController)

self.performSegueWithIdentifier ("SecondViewController", sender: self)
Run Code Online (Sandbox Code Playgroud)

但我似乎无法找到在哪里指定我的第二个屏幕的id,我只是找到了Storyboard ID,是吗?

我已经尝试过,只是因为以下错误而收到了崩溃:

Receiver()没有带标识符'SecondViewController'的segue

任何的想法?谢谢

xcode ios uistoryboard uistoryboardsegue swift

12
推荐指数
1
解决办法
2万
查看次数