iOS開發出錯whose view is not in the window hierarchy!的解決

大熊貓豬·侯佩原創或翻譯作品.歡迎轉載,轉載請注明出處.
如果覺得寫的不好請多提意見,如果覺得不錯請多多支持點贊.謝謝! hopy ;)


一個簡單的單窗口App在運行時出現錯誤:

2016-04-07 14:28:48.411 BlurViewAndPopView[4364:168520] Warning: Attempt to present <UIAlertController: 0x7a0a4e00> on <BlurViewAndPopView.ViewController: 0x797757d0> whose view is not in the window hierarchy!2016-04-07 14:28:48.935 BlurViewAndPopView[4364:168520] Attempting to load the view of a view controller while it is deallocating is not allowed and may result in undefined behavior (<UIAlertController: 0x7a0a4e00>)

該app的功能是在root VC中彈出一個popover視圖,其中包含一個表視圖,在點擊表視圖中的某一行時回調root VC中的閉包,完成改行內容的對話框彈出效果.

分析如下:根據錯誤信息,可以清楚看到在試圖彈出對話框時,root VC不在窗口的繼承體系中,這意味著此時root VC不在window中.

查看popover的cellSelect回調方法:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {let selectedItem = items[indexPath]selectionHandler?(selectedItem: selectedItem)dismissViewControllerAnimated(true, completion: nil)}

可以看到在調用root VC注冊的selectionHandler閉包之后才做的dismissVC的操作,這顯然順序不對!

我們可以這樣修改:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {let selectedItem = items[indexPath]defer {selectionHandler?(selectedItem: selectedItem)}dismissViewControllerAnimated(true, completion: nil)}

好了!現在將selectionHandler的回調放到final中,即可保證在root VC中的操作是在dismissVC之后才開始的,這是root VC應該在window的繼承體系中了.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458864.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458864.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458864.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

互聯網年鑒

最近互聯網行業&#xff0c;有一個詞說的比較多了&#xff0c;“資本寒冬”。作為&#xff0c;一個在這個行業里干的人&#xff0c;真心是好怕怕呢。 媽蛋&#xff0c;真怕哪天就突然失業了呀。所以&#xff0c;無聊的(操蛋的)去整理了一些98年開始一直到現在的互聯網中一些自己…

android oreo 開機動畫,Android O添加了一個 Splash Screen API幫助簡化啟動屏制作

大多數開發者對閃屏(splash screen)都持不同的態度。一些人支持用閃屏隱藏app的加載&#xff0c;然后自然過渡到主界面&#xff0c;而另一些人認為閃屏不管是對用戶還是開發者都是浪費時間。谷歌在這個問題上的立場也是不一的&#xff0c;以前不推薦使用閃屏的使用&#xff0c;…

C++空類默認函數

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 定義一個空的C類&#xff0c;例如 class Empty { } 一個空的class在C編譯器處理過后就…

拼接SQL的一個技巧

2019獨角獸企業重金招聘Python工程師標準>>> 為了避免判斷是否要在字符串中加 AND 來連接查詢條件&#xff0c;我們可以直接在在WHERE 后面寫 id>0。 這樣&#xff0c;我們在拼接條件的時候&#xff0c;就可以直接寫 AND 了。 SELECT* FROM t_table WHEREid>0…

【Linux導論】Linux引導流程(The Boot Process)

原文 LFS101x.2 Introduction to Linux (Linux Foundation) Chapter 03: Linux Structure and Installation - Section 2: The Boot Process 引導流程 - (The Boot Process) 你是否想過&#xff0c;在你按下電源開關直至Linux登陸提示出現時&#xff0c;后臺到底發生了哪些事&a…

String類 寫出類的成員函數實現

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 已知String類定義如下&#xff1a; class String { public: String(const char *str …

android 管理類,android 線程管理類

1. 延時任務以及取消延時的應用場景&#xff1a;實時搜索&#xff0c;文字內容變化時候不發送請求&#xff0c;當停止變化指定時間后再發送請求2. 使用方法&#xff1a;// 回到主線程MainThreadHelper.runOnUIthread(new Runnable() {Overridepublic void run() {// pushActivi…

計算一行文本的高度

計算一行文本的高度 說明 有時候我們需要知道指定的幾行文本的高度&#xff0c;此工具用于解決此種問題。 源碼 // // NSStringLabelWidthAndHeight.h // ZiPeiYi // // Created by YouXianMing on 15/12/9. // Copyright © 2015年 YouXianMing. All rights reserved.…

python筆記-python編程優化:常用原則和技術介紹

本人翻譯自《Exper Python Programming》 Premature optimization is the root of all evil in programming -Donald Knuth 優化的三原則 讓它跑起來先一個非常常見的錯誤就是在編寫代碼之初我們就開始對代碼進行優化。讓人傷心的是這通常做的都是無用功&#xff0c;很多軟…

C++成員函數重載、覆蓋和隱藏的區別

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** C成員函數重載、覆蓋和隱藏的區別class Base{public:void Walk(int x){ cout <<…

用fputc()函數以字符串形式寫入字符到磁盤文件

2019獨角獸企業重金招聘Python工程師標準>>> #include <stdio.h> #include <stdlib.h>int main(){FILE *fp;char ch;if((fpfopen("testfile", "a")) NULL){fprintf(stderr, "Error opening file.\n",fp);exit(1);}print…

android 浮動文字提示,Android實現自由拖動并顯示文字的懸浮框

項目中需要實現一個狀態顯示的懸浮框&#xff0c;要求可以設置兩種模式&#xff1a;拖動模式和不可拖動模式。實現效果圖如下&#xff1a;實現步驟&#xff1a;1.首先要設置該懸浮框的基本屬性&#xff1a;/*** 顯示彈出框** param context*/SuppressWarnings("WrongConst…

Android4.2.2的Stagefright維護編解碼器的數據流

這里是他們自己的源代碼閱讀點滴總結屬性&#xff0c;轉請注明出處&#xff0c;謝謝。歡迎和大家分享。qq:1037701636 email:gzzaigcn2012gmail.comAndroid源代碼版本號Version&#xff1a;4.2.2; 硬件平臺 全志A31前沿&#xff1a;在前面的博文中&#xff0c;基本提到的是stag…

PHP的安裝

PHP的環境也是諸多服務器軟件的必要因素之一&#xff0c;它是一個HTML內嵌式語言&#xff0c;在服務器端執行。由于PHP的開源高效化平臺&#xff0c;所以搭建一個php環境是一個運維工程師必備的能力。現在lamp也有類似lnmp.org那種一鍵安裝包&#xff0c;地址是http://yumlamp.…

android 橫向鋪滿,Android開發全程記錄(八)——設置ImageView顯示的圖片鋪滿全屏(適應魅族等不常見屏幕比例)...

為適應不同屏幕的手機&#xff0c;ImageView顯示的圖片可能不鋪滿屏幕&#xff0c;如果定高的話&#xff0c;兩邊可能會出現空白。魅族手機就會有這種情況&#xff0c;在其他手機里顯示正常&#xff0c;在魅族手機里顯示&#xff0c;圖片左右兩邊會出現空白&#xff0c;為解決這…

tihs 關鍵字

//this關鍵詞/*調用類中的屬性 調用類中的方法或構造方法 調用當前對象&#xff0c;調用自己的方法&#xff0c;可以省略。 */ //http://blog.sina.com.cn/s/blog_71f6c1980100wtj4.html//this指當前對象自己public class Google{String s"hello";public Google(Stri…

良好的編程習慣

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 良好的編程習慣良好的習慣對于人的成長是非常重要的&#xff0c;良好的編程習慣對于我…

ntfs for mac使用注意事項有哪些?

2019獨角獸企業重金招聘Python工程師標準>>> mac的用戶有很多&#xff0c;一些用戶朋友會發現自己的電腦是無法讀寫ntfs驅動器的。而ntfs驅動器又是一種常用的驅動器。面對這種情況我們可以選擇用NTFS for Mac軟件來幫助我們&#xff0c;它可以讀寫ntfs驅動器&#…

android音樂播放器文章,Android復習09【內容提供者、音樂播放器】

目 錄PersonCpPersonCp.javainsert()ContentObserver音樂播放器1、添加讀寫權限1.1、動態權限授予(調用封裝好的方法)2、獲取音樂文件(MainActivity.java)2、Music.java(實體類)申請訪問SD卡的權限設置適配器下拉刷新PersonCpPersonCp.javapackage cn.wangzg.personcp;import a…

程序員的業余項目

程序員的業余項目&#xff0c;我們也叫它 side project。 前幾天&#xff0c;100offer 發起了一場活動叫 <尋找實干和堅持的技術力量>&#xff0c;他們是這么說的&#xff1a; 世界在被代碼改變著&#xff0c;而我們在創造著代碼。 僅僅是因為好玩&#xff0c;他開發了…