iOS 開發百問(9)
101、編譯錯誤:ld: library notfound for -lPods
當專案中使用了 cocoaPods 時,經常出現此錯誤(通常是 release 的時候)。
這是由於 pod install 後,cocoaPods 會建立一個新的 workspace。你必須關閉項目並重新打開。問題即可解決。
102、為什麼 iOS 的時間總是比真實時間慢8小時
例如,一個北京時間"2014-4-4 22:00"(字串),需要轉換成 NSDate。字串轉換成 NSDate 一般是透過 NSDateFormatter 進行的。而在iOS 上NSDate 以GMT 時間存儲,因此NSDateFormatter會自動將字串當前時區的本地時間處理,即將被轉換的北京時間(字符串"2014-4-4 22:00")換成GMT 時間(" 2014-4-4 14:00")。如果直接把這個 NSDate(longlong,1970以來的秒數或毫秒數)傳給伺服器,伺服器會把這個時間當成北京時間使用(實際上它卻是GMT時間),這就導致時間差了8小時。
正確的做法是在這個 NSDate 的基礎上加上時差。而時差的計算需要知道目前時區。 [NSTimeZonesystemTimeZone]可以得到目前時區(東8區),然後用 secondsFromGMTForDate: 方法可獲得這個時區(東8區)的時差(以秒計)。程式碼如下:
NSDateFormatter* df=[NSDateFormatter new]; // [dfsetLocale:[NSLocale currentLocale]]; df.dateFormat=@"yyyy-MM-dd HH:mm"; NSDate* date=[dfdateFromString:@"2014-4-4 22:00"]; NSTimeZone *zone =[NSTimeZone systemTimeZone]; NSInteger interval = [zonesecondsFromGMTForDate: date]; NSDate *localeDate =[date dateByAddingTimeInterval:interval]; NSLog(@"%@",localeDate);
103、禁止 UITableViewController 中鍵盤彈出動畫
TableViewController 中內建了鍵盤彈出動畫的程式碼,當儲存格中的輸入控制項彈出軟鍵盤時,tableView 會自動向上捲動。但這個功能有時候會帶來大麻煩,因為有時候輸入控制會被捲到不可視的地方。由於我們無法修改框架的程式碼,所以這種情況下我們必須放棄使用 TableViewController(子類化),而改用一般的UIViewController+UITableView 代替。但有時我們必須使用TableViewContrller-例如想使用它的靜態儲存格,則可以透過下列方法解決。在UITableViewController 子類別中覆寫 viewWillAppear 方法,停用父類別的 viewWillAppear 行為。即不要呼叫[superviewWillAppear:animated]一句:
-(void)viewWillAppear:(BOOL)animated{ // Override super method with don'tcall [super viewWillApper] }
104、什麼時候應該使用NSCache
NSCache 會自動根據記憶體壓力釋放其中的某個快取物件(例如視圖被銷毀,或快取的物件實在太多) 。因此 NSCache 快取的物件必須是可以重建的,例如這些物件——可以在需要時從網路上下載到的資料。否則,你不應當使用 NSCache——因為物件不知道什麼時候就會被銷毀了。
因此,使用NSCache 時必須注意,如果檢索的物件在cache 中不存在,我們必須重建一個:
-(CachedObject)getCachedObject:(id)key{ id* obj=[NSCacheObjectobjectForKey:key]; if (cb==nil) { obj=[[CachedObjectalloc]init]; // Recreate cached object …… } return obj; }
105、Pods 在Xcode5 上Archive 的問題
問題描述:
Archive 時出現如下錯誤(debug 時出現如下錯誤(debug 時出現以下錯誤(debug 時出現以下錯誤(debug 時出現以下錯誤(debug 時出現以下錯誤(debug 時)可能是正常的):
ld: library not found for -lPods
問題是由於Xcode5.x 現在會檢測依賴項目的architecture ,其設定必須和主項目一致,否則該依賴項目會被拒絕(即不會編譯)。
解決辦法:
在 Pods 專案的所有 target 下,將他們的 architecture 設定為和主專案一致。
106、如何查看靜態庫支援的Architecture
使用「lipo -info 靜態庫檔案」指令,例如:
lipo -info Unrar4iOS
接著終端會如下顯示:
Architectures in the fat file: Unrar4iOS are: armv7 arm:6arm i386
107、專案中引入某些靜態函式庫會導致在Archive 時報「Undefined symbols forarchitecture armv7s/arm64」錯誤
正如問題105 所述。除了用問題 105 的解決方法,還有一個解決方法。
首先查看該靜態庫的 Architecture(參考問題106)。然後修改 Scheme 為該靜態函式庫支援的 Architecture。接著修改 Buid Settings 中的 Build Active ArchitectureOnly(僅編譯為所選的架構),將數值改為 Yes。然後編譯即可。
108、Autolayout 下,UITableView 的高度不正確
Autolayout 下,如果有導覽欄,視圖上的 UITableView 受 constraints 的限制,運行時高度被 constraints 重新設定為沒有導覽列的高度。此時應該實作viewDidLayoutSubviews 方法,將 constraints 的影響排除:
- (void)viewDidLayoutSubviews { _table.frame=CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height); }
109、如何修改預設回傳按鈕的title?
假設導航為:A視圖-->B視圖
如果要改變B視圖返回A視圖的返回按鈕的title,只需在A視圖中使用如下代碼:
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action:nil]; B视图不用做任何操作。
110、有一個空對象,但它既不是nil,也不是null?
它是 NSNull。你可以列印這個物件(用 po 指令或 NSLog),則列印結果是“
由於O-C 的集合物件中不允許插入空值(nil),而 NSNull 並不是 nil,所以就用NSNull 物件來表示這個集合為空(表示列表結束)。而且,與 nil 不同,發送訊息給一個 NSNull 將導致異常。
NSNull有唯一的方法:[NSNull null]你可以用它來測試一個物件是不是 NSNull:
BOOL isNSNull(id any){ return [any isEqual:[NSNullnull]]; }
以上就是iOS 开发百问(9)的内容,更多相关内容请关注PHP中文网(www.php.cn)!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

一年一度的WWDC已經結束,iOS18無疑是大家關注的一大焦點。目前有許多iPhone用戶都搶先升級到了iOS18,但各種系統Bug讓人難受。有部落客表示,升級iOS18要謹慎,因為「Bug多到飛起」。部落客表示,如果你的iPhone是主力機,建議不要升級iOS18,因為第一版的Bug非常多。他也彙整了幾個目前遇到的系統Bug:1、切換圖示樣式卡頓,導致圖示不顯示2、手電筒示寬動畫經常遺失3、抖音App上傳不了影片4、微信訊息延遲10s左右推送5 、電話偶爾打不出去,顯示黑屏6、發熱嚴

感谢网友吉茵珂絲、xxx_x、番茄炒西红柿、Terrence、香辣鸡腿堡的线索投递!7月27日消息,苹果公司今天面向开发者,重新发布了iOS/iPadOS18Beta4更新,内部版本号从22A5316j升级到22A5316k,目前尚不清楚两个Beta4版本更新之间的区别。已经注册的开发者可以打开“设置”应用程序,进入“软件更新”部分,点击“测试版更新”选项,然后切换iOS18/iPadOS18开发者测试版设置来选择测试版。下载并安装测试版需要与开发者账户关联的AppleID。7月24日报道,iO

更新:Saunders Tech 已將教學上傳到他的 YouTube 頻道(下面嵌入影片),解釋如何在歐盟境外的 iPad 上安裝 Fortnite 和 Epic Games Store。然而,該過程不僅需要特定的 iO 測試版

7月31日消息,蘋果昨天(7月30日)發布新聞稿,宣布推出新的開源Swift包(swift-homomorphic-encryption),用於在Swift程式語言中啟用同態加密。註:同態加密(HomomorphicEncryption,HE)是指滿足密文同態運算性質的加密演算法,即資料經過同態加密之後,對密文進行特定的計算,得到的密文計算結果在進行對應的同態解密後的明文等同於明文資料直接進行相同的計算,實現資料的「可算不可見」。同態加密技術可以計算加密數據,而且不會向操作過程洩漏底層的未加

6月1日消息,科技媒體AppleInsider今天發布博文,表示蘋果將會在iOS18系統中,為「無邊記」(Freeform)應用程式擴充推出「Scenes」的全新導航功能,並新增物件對齊的新選項。 「無邊記」應用簡介先簡單介紹下「無邊記」應用,應用於2022年推出,目前已推出iOS、iPadOS、macOS15以及visionOS版本。蘋果官方介紹如下:「無邊記」是讓靈感變成現實的絕佳工具。在支援幾乎所有文件類型的靈活畫布上勾勒項目草圖、設計心情看板或開始腦力激盪。借助iCloud,所有看板

感謝網友辣雞腿堡、軟媒新友2092483、手寫的從前、DingHao、小星_14、窩窩頭吃大口、非影Q、軟媒新友2168428、Slades、Aaron212、快樂小刺蝟、小伯爵、吃魚的小奶貓的線索投遞! 【點此直達升級教學】7月24日訊息,蘋果今日向iPhone和iPad用戶推送了iOS/iPadOS18開發者預覽版Beta4更新(內部版本號:22A5316j),這次更新距離上次發布隔了15天。 Carplay壁紙蘋果為CarPlay添加了壁紙,涵蓋淺色和深色兩種模式,其壁紙風格類似於iPhon

【點此直達升級教學】5月8日訊息,蘋果今日向iPhone用戶推送了iOS17.5RC更新(內部版本號:21F79),這次更新距離上次發布隔了70天。如何升級iOS/iPadOS/watchOS/macOS開發版和公測版?升級iOS/iPadOS17開發者預覽版及公測版,可參考家友分享經驗:經驗貼一||經驗貼二||經驗貼三||經驗貼四。從iOS/iPadOS16.4開發者預覽版Beta1開始,需要註冊蘋果開發者計劃,註冊後開啟系統【設定】【軟體更新】即可看到升級選項。需注意,你的iPhone或iP

在剛結束的歐洲盃決賽中,你是否為自己支持的球隊瘋狂打call?在馬上到來的巴黎奧運中,你是否也期待能完美捕捉到各賽事的高光時刻?這其中,擁有一台優質的觀賽設備至關重要。哈趣K2投影機以其高性價比和出色的性能,當之無愧地成為觀賽良選。它不僅具備高亮度、清晰的畫質,還能提供沉浸式的觀影體驗,讓每一場比賽的精彩時刻都彷彿近在咫尺。這樣的設備,你是否已經心動了呢?它定能讓你在家中也能享受到奧運賽事的熱情與夢想。哈趣K2貼心最大的亮點就是它210°的超大角度調節,無論是天花板還是牆壁,都可以方便觀影。
