首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当按下搜索栏时切换到另一个视图控制器时意外发现nil

,这通常是由于视图控制器的生命周期管理不当或者视图控制器之间的数据传递出现问题导致的。

首先,我们需要确保在切换到另一个视图控制器之前,搜索栏的值已经被正确地传递给了目标视图控制器。可以通过以下几种方式来实现:

  1. 使用代理模式:在目标视图控制器中定义一个代理协议,并在源视图控制器中实现该协议。当搜索栏的值发生变化时,通过代理方法将值传递给目标视图控制器。
  2. 使用通知中心:在源视图控制器中发送一个通知,将搜索栏的值作为通知的参数传递给目标视图控制器。目标视图控制器通过监听该通知来获取搜索栏的值。
  3. 使用属性传值:在源视图控制器中定义一个公共属性,将搜索栏的值赋给该属性。在切换到目标视图控制器之前,将该属性的值传递给目标视图控制器。

以上三种方式都可以实现数据的传递,具体选择哪种方式取决于项目的需求和架构。

另外,还需要确保目标视图控制器在接收到搜索栏的值后,能够正确地处理和展示这个值。如果目标视图控制器在接收到搜索栏的值时发现为nil,可能是以下几个原因导致的:

  1. 视图控制器的生命周期管理不当:确保目标视图控制器的生命周期方法(如viewDidLoad、viewWillAppear等)中正确地处理了搜索栏的值。
  2. 视图控制器之间的传值逻辑有误:检查数据传递的代码逻辑,确保搜索栏的值能够正确地传递给目标视图控制器。
  3. 搜索栏的值为空:在切换到目标视图控制器之前,检查搜索栏的值是否为空。如果为空,可以考虑给搜索栏设置一个默认值或者进行其他处理。

总结起来,当按下搜索栏时切换到另一个视图控制器时意外发现nil,需要检查数据传递的逻辑是否正确,确保搜索栏的值能够正确地传递给目标视图控制器,并且目标视图控制器能够正确地处理和展示这个值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

UIViewController生命周期

一、视图控制器 UIViewController采用懒加载的方式,也就是说第一次访问到view属性才会加载或创建它。...由于视图视图控制器管理,所以讨论视图的加载方式,主要讨论视图控制器的加载方式。 通过Storyboard加载:这是苹果推荐的方式。...7、ViewWillDisAppear 视图即将消失 8、ViewDidDisAppear 视图已经消失 9、ViewWillUnload(已废弃) 内存过低,需要释放一些不需要使用的视图,即将释放时调用...挂起,程序还是停留在内存中的,系统内存低,系统就把挂起的程序清除掉,为前台程序提供更多的内存。...applicationWillResignActive:在应用程序将要由活动状态切换到非活动状态时候,要执行的委托调用,如 home 按钮,返回主屏幕,或全屏之间切换应用程序等。

1.9K10

Cocoa编程中视图控制器视图类详解

都是在被推入的UIViewController子类内部执行推入请求和相关导航的定制(如:右键按钮)。...:搜索显示控制器 • splitViewController:分割视图控制器 • modalViewController:模式控制器 • navigationController:导航控制器 • tabBarController...• –viewDidLoad:加载控制器视图到内存,该方法被调用。...控制器加载视图过程 调用视图控制器的view属性视图控制器会先调用loadView方法加载视图,因此,可以在loadView方法中创建所有的视图,这是比较好的编程惯例。...事件处理 如图所示,一般情况一个视图不响应用户事件,它会将事件传递给它的父视图。但是,视图视图控制器管理,它会将事件首先传递给视图控制器

5.1K50
  • 【IOS开发基础系列】UISearch专题

    ",@"模糊搜索"];     bar.selectedScopeButtonIndex = 1;//通过下标指定默认选择的那个选择     //7.控制搜索下部的选择是否显示出来(需设置为YES...,输入搜索文本、点击button按钮后,代理的方法     会完成搜索对应的操作。    ...,清空上一次的搜索结果cell         对于搜索结果表视图,IOS并不会随着SearchVC的退出而移除(应该是处于提高cell重用角度考虑),所以第二次进入视图,默认其实还是显示的上次搜素结果... = self; //协议(UISearchResultsUpdating)     //将搜索控制器搜索条设置为页眉视图 self.tableView.tableHeaderView = searchVC.searchBar...(搜索内容为空,返回的所有数据,如果搜索内容为空,返回空,需要进行其它修改操作.) 4 开发技巧 4.1 兼容IOS7、8并结合自定义导航条使用 4.1.1 核心思路         虽然UISearchController

    52320

    IOS开发之-搜索UISearchController详解

    上篇文章说了搜索两种实现方法,建议大家使用UISearchController。今天我在写项目的时候,在搜索结果实现点击效果出现一点小问题。发现昨天写的不够全面,在这里做一些补充。..._searchController.searchResultsUpdater= self; 3设置属性 //设置UISearchController的显示属性,以下3个属性默认为YES //搜索...,背景变暗色 _searchController.dimsBackgroundDuringPresentation = NO; //搜索,背景变模糊 _searchController.obscuresBackgroundDuringPresentation...void)updateSearchResultsForSearchController:(UISearchController *)searchController; 注意点: 1、如果你希望在同一个视图中显示搜索结果...但是这是不支持TVOS,请提供TVOS一定要指定结果控制器

    2K100

    编码篇-iOS开发中的奇巧小伎

    22、使用-performSelector:withObject:withObject:afterDelay:方法,需要传入多参数问题 23、比较两个CGRect/CGSize/CGPoint是否相等...24、比较两个NSDate相差多少小时 25、播放一张张连续的图片 26、判断两个rect是否有交叉 27、判断一个字符串是否为数字 28、将一个view保存为pdf格式 29、获取当前导航控制器前一个控制器...30、保存UIImage到本地 31、动画修改label上的文字 32、判断一个view是否为另一个view的子视图,或者是子试图的子试图。...,用户连续输入的时候不搜索,用户停止输入的时候自动搜索(我这里设置的是0.5s,可根据需求更改) 50、某个界面多个事件同时响应引起的问题(比如,两个button同时push到新界面,两个都会响应,可能导致...atomically:YES]; NSLog(@"documentDirectoryFileName: %@",documentDirectoryFilename); } 29、获取当前导航控制器前一个控制器

    5.4K10

    Win10 快捷键大全(史上最全)「建议收藏」

    游戏处于打开状态) Windows 徽标键 + H 打开“共享”超级按钮 Windows 徽标键 + I 打开“设置” Windows 徽标键 + J 将焦点设置到 Windows 提示(如果可用...Shift + 单击某个任务按钮 打开某个应用,或快速打开应用的另一个实例 Ctrl + Shift + 单击某个任务按钮 以管理员身份打开应用 Shift + 右键单击某个任务按钮 显示该应用的窗口菜单...打开设置 Backspace 回退到“设置”主页 在带有搜索框的任何页面上键入 搜索设置 Windows 10 应用中的键盘快捷方式 在许多应用(如照片、Groove 和地图)中,当你将鼠标指针悬停在某个按钮上...在“程序员”模式选择 Not & 在“程序员”模式选择 And 空格键 在“程序员”模式切换位值 游戏键盘快捷方式 此键 执行此操作 Windows 徽标键 + G 打开游戏游戏处于打开状态...执行此操作 Alt + Enter 全屏播放 Esc 退出全屏 Enter 选择焦点中的内容 空格键 或 Ctrl + P 播放或暂停(视频处于焦点中) Alt + 向左键 或 Windows

    16.6K30

    iOS 9人机界面指南(四):UI元素(上) - 腾讯ISUX

    当你这么做的时候,请确保用户在轻击屏幕即可重新唤起状态以及相关的UI。而除非你有充分的理由,否则最好不要重新定义一个手势来让用户唤起状态,因为用户不会发现,就算发现了也难以记住。...键盘被唤起、用户使用了手势、或者当前视图变为竖屏的情况,导航可以隐藏。...书签按钮只有当搜索中没有占位符或用户输入内容才会出现,搜索中已有文本,书签按钮会被清除按钮(Clear button)所代替。 清除按钮(The Clear button)。...请注意,搜索视图控制器包含在导航控制器里面的时候——比如在邮件应用(Mail)中那样,当用户激活搜索搜索会自动上浮,平铺到原来导航的位置上。...搜索出现时,范围栏会出现在它的附近。范围栏的外观与你所指定的搜索的外观兼容。 当用户想在明确的分类范围内进行搜索,使用范围栏是非常有用的。

    10.1K51

    18个您想了解的微小但有用的macOS功能

    macOS具有许多如此小巧而有用的功能,在您偶然发现它们或有人将它们指出给您之前,很容易错过它们。 我用了两年的时间没有注意到Safari的地址在私人浏览模式从白色变为灰色。我知道我不是很敏锐。...4.跳回到搜索结果 在获取上面的屏幕截图,我偶然发现另一个功能:SnapBack。 您单击Google之类的搜索结果中的链接,然后从一个网页跳至下一个网页,回到您的搜索结果是很痛苦的,对吧?...经过一些试验,我发现您通过搜索引擎的网页进行搜索而不是在Safari地址或智能搜索字段中键入查询,就会发生这种情况。不过,该功能在DuckDuckGo。com上运行良好。...可惜的是,SnapBack不适用于非专用搜索引擎的网站上的搜索结果。 5.自动完成字 如果您在输入单词Option + Esc键,则自动完成功能会立即生效,并在其中弹出单词菜单。...18.从任何窗格查看所有系统偏好设置 如果每次要切换到其他窗格都使用“显示全部”按钮还原到“系统偏好设置”的主视图,则需要此设置。无需单击该按钮,而是单击并按住以显示带有所有可用首选项窗格的菜单。

    6.1K30

    屏幕成像原理以及FPS优化Tips

    视频控制器还未读取完成,即屏幕内容刚显示一半时,GPU 将新的一帧内容提交到帧缓冲区并把两个缓冲区进行交换后,视频控制器就会把新的一帧数据的下半段显示到屏幕上,造成“画面撕裂”现象,我们称之为“screen...,通过位运算“与”即可完成,所以可认为是瞬间完成。 双缓冲的模型,工作流程这样的: 在某个时间点,一个屏幕刷新周期完成,进入短暂的刷新空白期。...在这种模型,只有当 VSync 信号产生,CPU/GPU 才会开始绘制。这样,帧率大于刷新频率,帧率就会被迫跟刷新频率保持同步,从而避免“tearing”现象。...所以,如果你发现你的玩游戏的时候出现了画面撕裂,可以检查是否开启了VSync。如下,是某款游戏的VSync开关: ?...这里特别说一 CALayer:CALayer 内部并没有属性,调用属性方法,它内部是通过运行时 resolveInstanceMethod 为对象临时添加一个方法,并把对应属性值保存到内部的一个

    9.6K73

    iOS导航使用总结

    但是此时我们却发现页面的侧滑返回功能不可用了。...,默认为YES,用于优化滑动类视图(继承于UIScrollView的视图)在视图控制里的显示: iOS系统的导航UINavigationBar与标签UITabBar默认都是半透明模糊效果,在这种情况系统会对视图控制器的...我们可以通过一段代码来测试一效果,在默认导航(半透明)的视图控制器里添加如下代码: //UITextView是滑动视图,内容自动向下偏移,不会被导航覆盖 UITextView *leftTextView...导航透明情况,滑动视图自动偏移,普通视图被遮挡 其实,这种系统的优化也是可以控制关闭的,关闭优化之后,滑动视图就会和普通视图一样,如果还设置其布局的原点是(0,0),其内容就会被导航所覆盖,关键代码如下...,默认值是UIRectEdgeAll,即:当前视图控制器里各种UI控件会忽略导航和标签的存在,布局若设置其原点设置为(0,0),视图会延伸显示到导航的下面被覆盖。

    3.2K20

    iOS:分割控制器UISplitViewcontroller

    介绍 Split View通常只是一个基本元素,它填满整个屏幕,不可能把Split View放到其他什么的内部,一般情况是提供给整个app的。...property (nonatomic, copy) NSArray *viewControllers; 代理方法:Split View不能没有delegate,如果没有设置delegate,那么Split...MasterNavigationController = [[UINavigationController alloc]initWithRootViewController:MasterVC]; //创建右侧导航控制器...Master的导航和按钮,并设置表格视图的数据源和代理 - (void)viewDidLoad { [super viewDidLoad]; //创建UITableView...whiteColor]]; } 演示结果如下: 开始: 点击Master,显示Master主控制器: 点击单元格,Detail详细控制器显示的内容: 点击屏幕,关闭Master主控制器

    2K30

    【iOS开发-22】navigationBar导航,navigationItem建立:获取导航中的基本文本和button以及各种跳跃

    也要注意一有多个button的排列顺序。 (5)我们创建的这些导航条button有非常多种形式。...有的是由文字的,有的图片,有的系统自带的如摄像头或者Reply这些icon,有的全然是自定义的视图。...须要创建两个视图控制器(ViewController根视图控制器,SecondViewController子视图控制器),然后放在导航控制器栈中。...隐藏导航条,由此点击进入其它视图导航条也会被隐藏。...PUSH或者POP一个视图控制器,这样在最上面的视图控制器就变了,这样视图也跟着变了,由于仅仅显示在栈顶得那个视图控制器视图 //所以(1)控制所谓的跳转。

    2.3K10

    iOS头部渐变的表格视图设计 原

    iOS头部渐变的表格视图设计         今天再来给大家带来一个开发中常用到的视图控制器,在很多应用中,可能都会遇到这样的一个需求:表视图控制器最上方有一个头图控件,表格视图滑动在顶部,导航透明...,表格视图逐渐向下滑动,导航渐渐出现,并且在滑动期间,头图会展示相关的渐变动画效果。...All rights reserved. /*  *  这个视图控制器创建出带缩放头图效果的视图控制器  *  tip:  *      1.这个视图控制器如果是被导航push出来的 则内部会使用假导航进行渐隐模拟... *      2.这个视图控制器如果是被present出来的 则不会出现假导航  *      3.这个视图控制器中自带一个TableView 设置TableView的头图不会影响原动画效果  *...我主要考虑两个需要优化的地方,第一是这个控制器在不同的场景可能会有不同的结构,例如在导航结构中被push出来或者通过模态跳转被present出来,我在这个控件的实现时做了兼容,实际上无论有无导航,控件内部都没有使用系统的导航

    1.2K20

    ViewController及View的生命周期1. 起因2. Controller的生命周期3. View的生命周期4. 内存警告

    这篇文章就小小撸一这中间的关系和顺序。 2. Controller的生命周期 系统提供了控制器从显示到消失的四个方法。 千万不要看到方法名中间出现了view就以为这是视图的方法。...2.1 viewWillAppear view即将被显示时调用,此时superview 为nil,也就是说这个是controller还不知道superview是谁。...iOS7新增加了导航控制器侧滑手势,触发侧滑返回,会调用系统的viewWillDisappear:方法,取消侧滑返回又会调用viewWillAppear:方法。...调用时刻:每次访问Controller的View,View为nil,就会调用loadView方法。...调用addSubivew:成功后会给该视图发送didAddSubivew:回调,触发UIView的子类在新增视图执行其他操作。

    1.4K30

    Swift-MVVM 简单演练(一)

    最好去UINavigationItem的头文件里面去找一,你可以control + 6快速搜索color关键字,如果没有的话,建议你搜索attribute试试,因为一般设置属性的方法都可以解决多数你想解决的问题的...到目前为止,虽然我们只是在基类控制器里面创建了访客视图setupVistorView,只有一个访客视图的HQVistorView,但是实际上当我们点击不同的子控制器的时候,每个子控制器都会创建一个访客视图...总结 使用代理传递消息是为了在控制器视图之间解耦,让视图能够被多个控制器复用,如TableView 但是,如果视图仅仅是为了封装代码,而从控制器中剥离出来的,并且能够确认该视图不会被其它控制器引用,...则可以直接通过addTarget的方式为该视图中的按钮添加监听方法 这样做的代价是耦合度高,控制器视图绑定在一起,但是省略部分冗余代码 ---- 调整未登录导航按钮 如果单纯的在setupVistorView...而在未登录状态,导航上面的按钮都是显示注册和登录。

    10.3K51

    六天完成一个简单iOS App - 第六天

    ,只不过weakSelf会被置为nil,所以我们需要在一点击返回的时候将请求取消,在-(void)viewWillDisappear:(BOOL)animated控制器view即将消失的时候 隐藏SVP...但是这里存在两个问题 此时最热评论虽然没有了,但是那部分会被空出来,这是因为我们之前对cell的高度进行了缓存,设置cell高度发现cellHeight不为零,则直接返回高度,不会重新计算。...因此我们这里将cellHeight设置为0,设置cell的cellHeight就会重新计算cellHeight。...,并且默认就是YES,但是有个局限性,只有在有一个屏幕滚动视图的时候才会生效,scrollView中有一个以上的滚动视图,将会失效。...播放视频和音乐 视频的播放项目中暂时使用了MPMoviePlayerViewController,跳转控制器进行播放,和音乐的播放,查看百思不得姐原项目,发现视频和音频都是在本界面播放的,自己尝试了一使用

    1.3K50
    领券