这个问题很常见,但我没有任何可用的答案来解决它。
我正在使用 iOS 5.1。我的导航 Controller 是选项卡栏 View Controller 中的一个选项卡。有一个 TableView ,其中选择一行会推送新的 View Controller 。
此问题仅在选择第二行时出现,并且仅在某些时候出现。这不是规律的。
推送 View 变为空白 - viewWillAppear/viewDidAppear 未被调用。单击导航栏的后退按钮时 - Root View 的 viewWillAppear/viewDidAppear 也未被调用,使其变为空白。
我以完全相同的方式推送第一行/第二行的选择 View 。但问题只出现在第二行。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
switch (indexPath.row) {
case 0:
AViewController *aObj = [[AViewController alloc] init];
aObj.homeObj = self;
[self.navigationController pushViewController:aObj animated:YES];
[aObj release];
break;
case 1:
BViewController *bVCObj = [[BViewController alloc] init];
bVCObj.homeObj = self;
[self.navigationController pushViewController:bVCObj animated:YES];
[bVCObj release];
break;
default:
break;
}
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
viewDidLoad 在推送 BViewController 时被调用,但是,viewWillAppear 和 viewDidAppear 不是被调用。以下是我的 viewDidLoad:
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor blackColor];
NSLog(@"nav stack: %@", [self.navigationController viewControllers]);
NSLog(@"nav stack: %@", [[self.navigationController visibleViewController] description]);
//some initialization and call of methods
}
这不是规律的。有时我会遇到这种情况,这种情况一直持续到我从后台关闭应用程序并重新启动它。但有时它工作得很好。我只是将我的 View Controller 推送到 nab 堆栈。
正如我在评论中提到的,它是标签栏 Controller 中的常规导航 Controller 。
最佳答案
您如何为 AViewController 和 BViewController 定义 View ?通常你会使用 initWithNibName,例如
AViewController *aObj = [[AViewController alloc] initWithNibName:@"mynibname" bundle:nil]`
正如 Carl 指出的那样,您显然可以只使用 init(尽管我没有在 UIViewController Class Reference 中看到这方面的记录),但是系统会对您的名称非常挑剔 Nib 文件。不过,文档确实说,您可以使用 initWithNibName 并为 NIB 名称传递 nil,在这种情况下,它会尝试为您找到它。不过,就个人而言,如果您的结果不一致,我会尝试使用 initWithNibName 并显式传递您的 NIB 的名称,看看是否可以纠正这种情况。
或者您是否在两个 Controller 中使用 loadView 以编程方式构建 View ?然后您需要向我们展示那些 loadView 例程(不要与 viewDidLoad 混淆)。
但是根据文档,您需要指定 NIB 或使用 loadView。查看View Management UIViewController 类引用中的讨论。
更新:
根据您的反馈,我有几点想法:
不用说,问题显然与上面的代码无关。您需要扩大搜索范围并向我们展示更多代码。也许向我们展示 B 的 viewDidLoad?
通常,如果您没有收到此类事件,那是因为 View Controller 层次结构与 View 层次结构不同步。人们这样做的最常见方式是,如果他们在某个时候做了类似“[addSubview someNewController.view]”的操作。如果您在任何上下文中使用 View Controller ,而不是 (a) 您的应用程序委托(delegate)的初始配置; (b) presentViewController(或关闭);或 (c) pushViewController(或 pop),那么您可能想分享您所做的事情。
正如 andreamazz 所指出的,您的评论“我的导航 Controller 位于选项卡栏 Controller 的 View Controller 内”,如果按字面意思阅读会有点令人不安。您可以将导航栏放在 View Controller 的 View 中,但不能将导航 Controller 放在 View Controller 中(除非您正在执行 View Controller 包含,这是完全不同的野兽)。同样令人担忧的是,在您的另一个问题中,您说,“在 UIViewController 中嵌入 UINavigationController 或 UITabBarController(我的情况)会以某种方式中断这些方法的调用。”问题是,您不会将导航 Controller 嵌入到其他 View Controller 中(除非它本身是一个容器 Controller ,例如选项卡 View Controller ),而是相反。但是,如果您的字面意思是您有一个包含导航 Controller 的 Controller ,那么您必须向我们展示您是如何做到的(正确的 View Controller 包含?),因为这是非常不寻常的。
这很不寻常,但我遇到过项目被破坏,最终处于奇怪的状态。至少,我可能会建议“产品”-“清理”并重建。如果问题仍然存在,并且您已将问题隔离到 B 的 NIB,则暂时重命名它并从头开始构建一个快速而肮脏的。
关于iphone - viewwillappear 和 viewdidappear 未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12225162/
我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我需要一些关于TDD概念的帮助。假设我有以下代码defexecute(command)casecommandwhen"c"create_new_characterwhen"i"display_inventoryendenddefcreate_new_character#dostufftocreatenewcharacterenddefdisplay_inventory#dostufftodisplayinventoryend现在我不确定要为什么编写单元测试。如果我为execute方法编写单元测试,那不是几乎涵盖了我对create_new_character和display_invent
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时
如何找到调用此方法的位置?defto_xml(options={})binding.pryoptions=options.to_hifoptions&&options.respond_to?(:to_h)serializable_hash(options).to_xml(options)end 最佳答案 键入caller。这将返回当前调用堆栈。文档:Kernel#caller.例子[0]%rspecspec10/16|===================================================62=====
Rails相对较新。我正在尝试调用一个API,它应该向我返回一个唯一的URL。我的应用程序中捆绑了HTTParty。我已经创建了一个UniqueNumberController,并且我已经阅读了几个HTTParty指南,直到我想要什么,但也许我只是有点迷路,真的不知道该怎么做。基本上,我需要做的就是调用API,获取它返回的URL,然后将该URL插入到用户的数据库中。谁能给我指出正确的方向或与我分享一些代码? 最佳答案 假设API为JSON格式并返回如下数据:{"url":"http://example.com/unique-url"
我正在写一篇关于在Ruby中几乎一切都是对象的博客文章,我试图通过以下示例来展示这一点:classCoolBeansattr_accessor:beansdefinitialize@bean=[]enddefcount_beans@beans.countendend所以从类中我们可以看出它有4个方法(当然,除非我错了):它可以在创建新实例时初始化一个默认的空bean数组它可以计算它有多少个bean它可以读取它有多少个bean(通过attr_accessor)它可以向空数组写入(或添加)更多bean(也通过attr_accessor)但是,当我询问类本身它有哪些实例方法时,我没有看到默认
我写了一个非常简单的rake任务来尝试找到这个问题的根源。namespace:foodotaskbar::environmentdoputs'RUNNING'endend当在控制台中执行rakefoo:bar时,输出为:RUNNINGRUNNING当我执行任何rake任务时会发生这种情况。有没有人遇到过这样的事情?编辑上面的rake任务就是写在那个.rake文件中的所有内容。这是当前正在使用的Rakefile。requireFile.expand_path('../config/application',__FILE__)OurApp::Application.load_tasks这里