iOS開發:相對路徑與相對工程名
一、絕對路徑與相對路徑1
iOS程式有固定的檔案訪問限制,只能在自己的沙盒內。
UIImage *img=[UIImage imageNamed:@"cellicon.png"];
這段程式碼從相對路徑載入了一個png圖片資源作為UIImage物件,沒有任何問題。因為它在內部已經偷偷得幫你把路徑轉化為相對路徑了,你還不知道吧!
接下來,如果要載入一些自定義格式的檔案或者資料,就會出現相對路徑和絕對路徑的問題。比如
//newPath為一個字串路徑,這裡的路徑你卻不能像上面那樣
NSFileHandle *fileHandle=[NSFileHandle fileHandleForReadingAtPath:newPath];
//這樣系統是找不到檔案的,因為這裡需要的是檔案的絕對路徑,而@“test.txt”完全是無效的。
NSFileHandle *fileHandle=[NSFileHandle fileHandleForReadingAtPath:@"test.txt"];
這個時候就需要NSBundle的幫忙了,這個類專門用來負責路徑轉化等等功能。大家都知道ios專案雖然在xcode下可以建立資料夾結構,但是實際上它是沒有檔案結構概念的,所以此時假如要載入放在專案目錄下的test.txt檔案,完整的程式碼應該是這樣
//方法1:
NSString *newPath=[NSString stringWithFormat:@"%@%@%@",[[NSBundlemainBundle]resourcePath],@"/",path];
NSLog(@"url=%@",newPath);
NSFileHandle *fileHandle=[NSFileHandle fileHandleForReadingAtPath:newPath];
此處[NSBundle mainBundle]是獲得NSBundle的一個單例物件,此單例物件 已經設定了預設的resourcePath,也就是你的app打包後的路徑,[NSBundle mainBundle] resourcePath]就是獲得這個完整的打包後的app路徑,但你的test.txt檔案並不在這個目錄,而是在app內部,這時就需要拼接路徑字串,[NSString stringWithFormat:@"%@%@%@",[[NSBundle mainBundle] resourcePath],@"/",path];
控制檯輸出app路徑resourcePath:
/Users/zouzouyanghong/Library/Application Support/iPhone Simulator/5.0/Applications/76116A6A-572D-43AE-AE78-17D7A88DCAFC/JFitnessProduct.app
控制檯輸出拼接後完整檔案絕對路徑:
/Users/zouzouyanghong/Library/Application Support/iPhone Simulator/5.0/Applications/76116A6A-572D-43AE-AE78-17D7A88DCAFC/JFitnessProduct.app/test.jat
//方法2:
NSString *newPath=[[NSBundle mainBundle] pathForResource:@"test" ofType:@"txt"];
NSFileHandle *fileHandle=[NSFileHandle fileHandleForReadingAtPath:newPath];
[[NSBundle mainBundle] pathForResource:@"test" ofType:@"jat"];pathForResource方法有兩個引數,前面這個為檔名,後面那個ofType就是檔案型別,也就是檔案字尾。這裡把檔名和字尾分開了,如果這時你得到的是一個完整的檔名如:@“test.txt”,那麼你得自己想辦法把檔名和字尾分開。要特別說明,此處的檔案字尾是不需要“.”的,如果寫成@“.jat”是錯誤的,載入檔案會失敗。
二、絕對路徑與相對路徑2
另外一處我們用到絕對路徑與相對路徑的地方就是我們在xcode裡面配置包含工程目錄下標頭檔案的時候,都要關聯著相對路徑和絕對路徑,如果只是自己用這個專案,用絕對路徑的問題不大。
如果你把工程發給別人,別人就要修改這個絕對路徑,這時候絕對路徑的缺點立馬出現。
1、所以在修改 Header Search Paths這個選項的時候使用
"$(SRCROOT)/當前工程名字/需要包含標頭檔案所在資料夾"
將上面的雙引號裡面的字串拷貝之後,你會發現這個“$(SRCROOT)”,會自動變成當前工程所在的資料夾。
這樣就可以了,發給別人,別人也不用在去修改路徑了。
2、設定PCH的相對路徑
絕對路徑:
要想設定PCH的相對路徑,首先我們需要去檢視絕對路徑。
點選PCH檔案,Xcode的右側會顯示PCH的屬性。這裡我們可以獲取到PCH的絕對路徑。
設定相對路徑:
從工程的路徑開始,前面使用$(SRCROOT)代替,即為PCH的相對路徑。
在Xcode的target配置中,在Build Setting中找到Prefix Header,將修改後得到的相對路徑新增到其中,並將Precompile Prefix Header的值設定為YES。
執行工程,PCH相對路徑設定成功。
三、使用相對工程名
你有可能會在填Prefix Header 即pch檔案的路徑那裡報錯,最近又學習到一種更好的方式:
$(SRCROOT)/$(PROJECT_NAME)/PrefixHeader.pch
,
其中$(PROJECT_NAME)
是相對工程名,比上面的方法更便捷.
相關文章
- HTML絕對路徑與相對路徑HTML
- Java工程路徑及相對路徑(轉載)Java
- 深入解析Java絕對路徑與相對路徑Java
- 檔案的相對路徑和絕對路徑以及根相對路徑
- 檔案絕對路徑和相對路徑
- Jsp相對路徑和絕對路徑JS
- web專案絕對路徑與相對路徑的問題Web
- 絕對路徑和相對路徑的區別,
- javascript將相對路徑修改為絕對路徑JavaScript
- 絕對路徑和相對路徑的區別
- Qt的相對路徑轉為絕對路徑QT
- 05_Linux相對路徑和絕對路徑Linux
- javaweb相對路徑file使用JavaWeb
- html中的路徑的介紹:絕對路徑和相對路徑HTML
- Linux檔案的路徑定位-相對路徑和絕對路徑Linux
- Webpack 中css 如何 import 使用 alias別名 相對路徑WebCSSImport
- python如何將相對路徑轉換為絕對路徑?Python
- 使用Javascript將相對路徑地址轉換為絕對路徑JavaScript
- 關於函式由絕對路徑轉為相對路徑函式
- 好程式設計師web前端分享絕對路徑與相對路徑的引用程式設計師Web前端
- 相對路徑轉換為絕對路徑的程式碼例項
- css程式碼與引用圖片的相對路徑CSS
- QT 檔案相對路徑載入QT
- html中想把圖片絕對路徑 改成相對路徑怎麼操作?HTML
- JAVAWEB——絕對路徑和相對路徑,到底加不加“/“,以及解決方案JavaWeb
- Linux中絕對路徑和相對路徑有什麼區別?Linux
- JSP 和 Servlet 中的絕對路徑和相對路徑問題JSServlet
- Webpack 中 css import 使用 alias 相對路徑WebCSSImport
- 【python3基礎】相對路徑,‘/’,‘./’,‘../’Python
- VsCode相對路徑的問題VSCode
- 好程式設計師分享html圖片絕對路徑改相對路徑程式設計師HTML
- 最最基礎的乾貨:Linux中的絕對路徑和相對路徑Linux
- HTML中相對路徑的方式引用檔案HTML
- 好程式設計師web分享圖片標籤、絕對路徑和相對路徑程式設計師Web
- JSP、Servlet中的相對路徑和絕對路徑 頁面跳轉問題JSServlet
- 關於在Xcode的OC工程中相對路徑失敗的原因XCode
- 請教:相對路徑中怎麼指明https與其埠HTTP
- JavaWeb 專案中的絕對路徑和相對路徑以及問題的解決方案JavaWeb