草庐IT

iphone - self.navigationController pushViewController 没有将 Controller 添加到堆栈

coder 2023-10-01 原文

我在一个名为 vcA 的 viewController 上,我这样做:

[self.navigationController pushViewController:vcB animated:YES];

并且有效。 vcB 被插入。在 vcB 的 viewDidAppear 中,我这样做:

NSArray *controllers = self.navigationController.viewControllers;

Controller 只包含一个对象,vcA !!!! (什么?)

为什么要将 vcB 添加到 Controller 数组中?有什么可以阻止这种情况发生的吗?

谢谢。

最佳答案

为了解决这个涉及将 View Controller 推送到导航 Controller 堆栈上的问题,我用头撞了一个星期的墙。

问题是这样的:我在一个基于导航控制的应用程序上,我有 3 个 View Controller ,vA、vB 和 vC。

我使用这个从 vA 推送 vB:

[self.navigationController pushViewController:vB animated:YES];

它起作用了,但是,当我尝试从 vB 中推送 vC 时,vB 的 self.navigationController 属性为 nil,并且 vB 不在导航 Controller 堆栈中。什么?是的,我将 vB 插入导航堆栈,但 vB 并未添加到其中,但即便如此,vB 仍能正确显示。

我发现在vB的viewDidLoad里面,self.navigationController不是nil,vB在导航 Controller 栈上,但是vB的viewDidLoad一结束,vB就被从导航 Controller 栈中移除了,它的navigationController属性被设置为nil .那时,vB 是一种幽灵控件,位于导航 Controller 堆栈之外。

我不需要提及从 vB 我无法回到 vA 或插入 vC。

那是怎么回事?

很简单,我是从一个 block 中插入 vB 的……就像这样:

void (^ block1)() = ^(){

   [self.navigationController pushViewController:vB animated:YES];

};

发生了什么是因为 UIKit 函数(push 东西)在一个 block 中执行,这个 block 可能运行在一个非主线程的线程上。

解决方案是将推送包装到主线程的调度中,使用:

void (^ block1)() = ^(){
dispatch_async(dispatch_get_main_queue(),
               ^{
                   [self.navigationController pushViewController:vB animated:YES];
               });

};  

该应用程序还有一个小问题,即连接到 viewController 的 socket 错误,但这是主要问题。这是一种很难发现的问题,因为它很微妙。当我向导航栏添加另一个按钮并且该按钮没有出现时,我发现了问题。所以,我怀疑涉及 UIKit 的事情正在发生,或者在那种情况下没有发生。这里的大问题是这段代码没有崩溃,没有错误消息,什么都没有,只是工作不好,但是工作。

关于iphone - self.navigationController pushViewController 没有将 Controller 添加到堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13278904/

有关iphone - self.navigationController pushViewController 没有将 Controller 添加到堆栈的更多相关文章

  1. ruby - 我需要将 Bundler 本身添加到 Gemfile 中吗? - 2

    当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/

  2. ruby - 难道Lua没有和Ruby的method_missing相媲美的东西吗? - 2

    我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/

  3. ruby-on-rails - 渲染另一个 Controller 的 View - 2

    我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

  4. ruby - 将 Bootstrap Less 添加到 Sinatra - 2

    我有一个ModularSinatra应用程序,我正在尝试将Bootstrap添加到应用程序中。get'/bootstrap/application.css'doless:"bootstrap/bootstrap"end我在views/bootstrap中有所有less文件,包括bootstrap.less。我收到这个错误:Less::ParseErrorat/bootstrap/application.css'reset.less'wasn'tfound.Bootstrap.less的第一行是://CSSReset@import"reset.less";我尝试了所有不同的路径格式,但它

  5. ruby-on-rails - rails 目前在重启后没有安装 - 2

    我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

  6. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  7. ruby-on-rails - rails : How to make a form post to another controller action - 2

    我知道您通常应该在Rails中使用新建/创建和编辑/更新之间的链接,但我有一个情况需要其他东西。无论如何我可以实现同样的连接吗?我有一个模型表单,我希望它发布数据(类似于新View如何发布到创建操作)。这是我的表格prohibitedthisjobfrombeingsaved: 最佳答案 使用:url选项。=form_for@job,:url=>company_path,:html=>{:method=>:post/:put} 关于ruby-on-rails-rails:Howtomak

  8. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  9. ruby-on-rails - 如何在 Rails Controller Action 上触发 Facebook 像素 - 2

    我有一个ruby​​onrails应用程序。我按照facebook的说明添加了一个像素。但是,要跟踪转化,Facebook要求您将页面置于达到预期结果时出现的转化中。即,如果我想显示客户已注册,我会将您注册后转到的页面作为成功对象进行跟踪。我的问题是,当客户注册时,在我的应用程序中没有登陆页面。该应用程序将用户带回主页。它在主页上显示了一条消息,所以我想看看是否有一种方法可以跟踪来自Controller操作而不是实际页面的转化。我需要计数的Action没有页面,它们是ControllerAction。是否有任何人都知道的关于如何执行此操作的gem、文档或最佳实践?这是进入布局文件的像素

  10. 没有类的 Ruby 方法? - 2

    大家好!我想知道Ruby中未使用语法ClassName.method_name调用的方法是如何工作的。我头脑中的一些是puts、print、gets、chomp。可以在不使用点运算符的情况下调用这些方法。为什么是这样?他们来自哪里?我怎样才能看到这些方法的完整列表? 最佳答案 Kernel中的所有方法都可用于Object类的所有对象或从Object派生的任何类。您可以使用Kernel.instance_methods列出它们。 关于没有类的Ruby方法?,我们在StackOverflow

随机推荐