iOS開發(fā)中一些坑點,也許你也遇到過

本文中的一些坑點是樓主個人在日常開發(fā)中遇到的一些問題,記錄搜集下來分享在此,希望能給同樣遇到問題的同學(xué)一些幫助
后續(xù)不定期持續(xù)更新

保持手機常亮

很多時候,我們需要保持手機常亮,比如視頻或直播的時候,那么只需要加上下面這句就好了,但是離開當前頁面的時候不要忘記關(guān)掉(設(shè)置為NO)

[[UIApplication sharedApplication] setIdleTimerDisabled:YES];

開啟系統(tǒng)自帶側(cè)滑返回

當你修改導(dǎo)航欄以后,你就會發(fā)現(xiàn)自帶側(cè)滑返回(邊緣70寬度有效)不能用了,那么請你在navi的根視圖控制器里面加上這句,就可以了

// Objective - C
self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;

// swift因為是強類型,所以不能像上面那么寫
// 你只需要根視圖遵循UIGestureRecognizerDelegate協(xié)議,然后加上下面這句就OK了
navigationController.interactivePopGestureRecognizer.delegate = self

Xcode 8的注釋快捷鍵不能用了

Xcode8上的bug真是多到可怕,注釋快捷鍵問題就是其中之一,有時用的好好的,突然就失靈了,這不是你的電腦問題,而且Xcode8bug,解決辦法 -> 在終端輸入下面一行命令,輸入后會要求輸入密碼,等待幾秒后,就完成了,然后重啟電腦就行了

sudo /usr/libexec/xpccachectl

LaunchImage

加載LaunchImage的方法有兩種:

  • 直接使用Launch Screen File
  • 使用Assets.xcassets里面的LaunchImage文件

一般都是使用第二種方法,在配置這個文件的有幾點需要注意

1 四個尺寸的圖一定要一一對應(yīng),就是對應(yīng)的坑里放對應(yīng)大小的圖片,不然不能用,運行的時候不顯示;當然,你放錯了圖片,Xcode會直接給予警告的
2 放好圖片以后,當然要測試了,一般情況下,你直接運行是不會顯示的,即使你的圖片放置的都正確,這個時候你必須刪除模擬器/手機原來的那個項目,再次運行才會顯示.

swift中使用系統(tǒng)關(guān)鍵字

一般情況下,最好不要使用系統(tǒng)關(guān)鍵來命名
但是也有特殊情況,非得使用不可,那么這個時候就需要使用''符號來包裹該關(guān)鍵字才可以
示例:

    /// Returns a default `URLEncoding` instance.
    public static var `default`: URLEncoding { return URLEncoding() }

注釋標簽

在開發(fā)中,注釋是必不可少的一部分,一份注釋良好的代碼可以幫助維護者快速上手;通常我們會使用mark標簽來表明一個段落代碼的用意:

// MARK: 這里是邏輯業(yè)務(wù)
// MARK: 這里是界面設(shè)置

當然,注釋標簽不僅僅只有這一個,還有TODO,這是一個非常有用的標簽,你可以在TODO后面寫上你未完成的事情,這樣對你或維護者都是一種負責任的表現(xiàn):

// TODO: 這里還有一些沒有完成
// FIXME: 這里有些bug要修復(fù)

當你使用TODOFIXME標簽的時候,你會發(fā)現(xiàn)在其左側(cè)的圖標都同MARK不一樣
有人可能對覺得這幾個標簽是在swift中使用的,其實不然,現(xiàn)在已經(jīng)通用了,他們在Objective - C的環(huán)境中也一樣可用,因為他們只是針對Xcode的;
當然如果你習(xí)慣下面這種寫法也不是不可以的,但是下面這種方式只能在Objective - C中使用,Swift3.0以后就不能使用了

#pragma mark - 這里是邏輯業(yè)務(wù)
#pragma mark - 這里是界面設(shè)置

返回值警告問題

Swift中,有些方法會默認有返回值,而這些值你可能會用不到,這個時候編譯器就會給你警告:xxx is unused

這個時候我們可以使用 _ 來接收一下,其實不接收也沒有關(guān)系,然而強迫癥和處女座的同學(xué)可能會有點兒...

_ = self.navigationController?.popViewController(animated: true)

storyboard/xib上拖tableview上方空白問題

storyboard/xib上拖一個tableview有時候,上方會空出一片空白,同時你運行的時候也會出現(xiàn)相應(yīng)的空白區(qū),就算你的約束設(shè)置為0也是不行的

tableview空白

解決辦法如下:

tableview空白解決方法

CoreData存儲使用Transformable類型存儲失敗

使用coredata存儲的時候,如果你需要存儲一些復(fù)雜類型的時候,你可能會選擇transformable格式,這個沒有問題,但你可能會遇到這樣的情況:其他都能存進去,而transformable類型的存不進去??

解決辦法:查看你要存儲的數(shù)據(jù)類型有沒有遵循NSCoding協(xié)議,因為只有遵循了該協(xié)議的類型才能夠使用transformable類型存儲

CoreData自動子類化問題

如果你是一個coredata使用者,那么你一定遇到過這樣的問題,當你創(chuàng)建好entity以后,使用Xcode的自動子類化(editor -> Creat xx Classes),這個時候Xcode會自動為你創(chuàng)建好兩個類,分別是:

  • entityName + CoreDataClass
  • entityName + CoreDataProperties

然后你開心打開文件后,發(fā)現(xiàn),一片紅色...

一片血紅

然后你開始如下步驟來回循環(huán):

  1. command + K
  2. command + B
  3. 蒙逼一小會兒
  4. 繼續(xù)步驟1

造成這個問題的原因是,你在創(chuàng)建的時候沒有把對應(yīng)entity的自動創(chuàng)建給勾選掉;
也就是說,其實Xcode在你創(chuàng)建這個entity的時候已經(jīng)創(chuàng)建了上面兩個類了,只是沒有直接添加在Xcode里面
而是隱藏在build文件里面路徑如下

/Users/<your user name>/Library/Developer/Xcode/DerivedData/AppName-agkwmibzbopevjgfajlcbyixzyev/Build/Intermediates/AppName.build/Debug-iphonesimulator/AppName.build/DerivedSources/CoreDataGenerated/Model

簡直深不可測,誰能想到在這里?筆者能發(fā)現(xiàn)是因為使用了全局搜索(好像搜了差不多10分鐘...)

解決辦法:

把系統(tǒng)自動創(chuàng)建的那倆貨刪掉,按照上面的路徑找到他們.
what?還不行?
derivedData里面帶有你項目名稱的文件夾刪掉,然后在把工程里面之前創(chuàng)建的那倆類也刪掉,再然后選中要子類化的entity,再然后把右側(cè)Data Model Inspector里面的Codegen屬性修改為Manual/None,最后再去創(chuàng)建

Archives - Crashes窗口

在打包上架的時候,你可能會來回打包幾次,畢竟會有各種問題出現(xiàn);

有些人使用電腦的習(xí)慣是,只要不用的窗口立馬: command + w

然后想去找Archives - Crashes列表發(fā)現(xiàn)已經(jīng)關(guān)閉了,怎么辦?再打包一次,然后讓Xcode自己打開 ?

其實,Xcode是有這個界面的快捷打開方法的,Window -> Organizer ??

Swift中Extension重寫方法問題

在寫swift的時候經(jīng)常會遇到這樣的問題:在extensionoverride父類的方法,沒有報錯,但是不執(zhí)行...
這個問題不是代碼的問題,也不是Xcode的問題,是因為Extension里面本身就不支持,官方解釋如下:

Extensions can add new functionality to a type, but they cannot override existing functionality

如果非要這么做怎么辦?非要這么做不是不可以,如果父類是你自己寫的,那么你可以在父類相對應(yīng)的方法前面加上@dynamic關(guān)鍵字

模態(tài)透明Controller不成功

iOS開發(fā)中經(jīng)常遇到這樣的需求,在某個頁面需要modal出來一個高斯模糊的頁面(新浪微博的發(fā)微博頁面就是如此),效果如下:

高斯模糊

iOS 8之前比較蛋疼,高斯模糊的view要自己手動實現(xiàn),然而8之后就多了一個VisualEffectView,如果還在適配iOS 7的同學(xué)請自行跳過??

iOS 8之后常規(guī)的思路是把viewbackgroundColor修改為clearColor,然后上面在放一個VisualEffectView,然而事實上幺蛾子總會讓我們措手不及,modal出來以后,下面viewbackgroundColor會變,在完全modal出來以后就自動變成白色了(如果你沒有設(shè)置windowbackgroundColor,那么就是黑色)...

請看幺蛾子(總有一些坑想害朕??)

總有一些幺蛾子

在遍尋Google之后,找到了原因:

NavigationController and the View Controllers are designed in such a way that only one view controller may show at a time. When a new view controller is pushed/presented the previous view controller will be hidden by the system. So when you reduce the modal view's alpha you will possibly see the window's backgroundColor (the black color you see now)

果然是系統(tǒng)干的,因為我們modal出新的viewcontroller以后,系統(tǒng)把其隱藏了,導(dǎo)致我們底部直接看到了window,所以,那個白色其實是window的顏色??

所以,要修改他們的關(guān)系,解決辦法,就是設(shè)定你要modal的controller的modalPresentationStyle,代碼如下:

// swift
toViewController.modalPresentationStyle = .overCurrentContext

// OC
toViewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;

生命不息吠各,折騰不止...
I'm not a real coder, but i love it so much!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末木蹬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子缨伊,更是在濱河造成了極大的恐慌持灰,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渠脉,死亡現(xiàn)場離奇詭異存皂,居然都是意外死亡寻拂,警方通過查閱死者的電腦和手機程奠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來祭钉,“玉大人瞄沙,你說我怎么就攤上這事。” “怎么了距境?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵泛粹,是天一觀的道長。 經(jīng)常有香客問我肮疗,道長晶姊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任伪货,我火速辦了婚禮们衙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘碱呼。我一直安慰自己蒙挑,他們只是感情好,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布愚臀。 她就那樣靜靜地躺著忆蚀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪姑裂。 梳的紋絲不亂的頭發(fā)上馋袜,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機與錄音舶斧,去河邊找鬼欣鳖。 笑死,一個胖子當著我的面吹牛茴厉,可吹牛的內(nèi)容都是我干的泽台。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼矾缓,長吁一口氣:“原來是場噩夢啊……” “哼怀酷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嗜闻,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蜕依,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后泞辐,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笔横,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡竞滓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年咐吼,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片商佑。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡锯茄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肌幽,我是刑警寧澤晚碾,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站喂急,受9級特大地震影響格嘁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜廊移,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一糕簿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧狡孔,春花似錦懂诗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至辱揭,卻和暖如春离唐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背问窃。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工侯繁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人泡躯。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓贮竟,卻偏偏與公主長得像,于是被迫代替她去往敵國和親较剃。 傳聞我的和親對象是個殘疾皇子咕别,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容