![十一章基于物聯(lián)網(wǎng)ios app應(yīng)用開(kāi)發(fā)實(shí)驗(yàn)_第1頁(yè)](http://file4.renrendoc.com/view11/M02/2A/04/wKhkGWW3FMyAbzY3AAGNQgTelHg382.jpg)
![十一章基于物聯(lián)網(wǎng)ios app應(yīng)用開(kāi)發(fā)實(shí)驗(yàn)_第2頁(yè)](http://file4.renrendoc.com/view11/M02/2A/04/wKhkGWW3FMyAbzY3AAGNQgTelHg3822.jpg)
![十一章基于物聯(lián)網(wǎng)ios app應(yīng)用開(kāi)發(fā)實(shí)驗(yàn)_第3頁(yè)](http://file4.renrendoc.com/view11/M02/2A/04/wKhkGWW3FMyAbzY3AAGNQgTelHg3823.jpg)
![十一章基于物聯(lián)網(wǎng)ios app應(yīng)用開(kāi)發(fā)實(shí)驗(yàn)_第4頁(yè)](http://file4.renrendoc.com/view11/M02/2A/04/wKhkGWW3FMyAbzY3AAGNQgTelHg3824.jpg)
![十一章基于物聯(lián)網(wǎng)ios app應(yīng)用開(kāi)發(fā)實(shí)驗(yàn)_第5頁(yè)](http://file4.renrendoc.com/view11/M02/2A/04/wKhkGWW3FMyAbzY3AAGNQgTelHg3825.jpg)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第十一 基于物聯(lián)網(wǎng)的第十一 基于物聯(lián)網(wǎng)的IOSAPP應(yīng)用設(shè)計(jì)實(shí) ios介 編寫(xiě)iOS應(yīng)用程序有何不 在Xcode中創(chuàng)建項(xiàng) Xcode項(xiàng)目窗 Xcode跳轉(zhuǎn) MVC方 第十一基于物聯(lián)網(wǎng)第十一基于物聯(lián)網(wǎng)的iosAPP應(yīng)用設(shè)計(jì) ios11.1.1必要開(kāi)始編寫(xiě)iOS應(yīng)用程序之前,需要做一些準(zhǔn)備工作。初學(xué)者需要一臺(tái)安裝了MountainLion(OSX10.8)Mavericks(OSX10.9)Intel架構(gòu)的Macintosh計(jì)算機(jī)。任何最近上市的基于Intel架構(gòu)的Macintosh計(jì)算機(jī)iOSiOSLoginAppleLoginAppleIDApple就點(diǎn)擊Joinnow創(chuàng)建一個(gè)ID,然后再登錄。登錄之后就進(jìn)入了iOS開(kāi)發(fā)中心的進(jìn)行iOS應(yīng)用開(kāi)發(fā)。iOS開(kāi)發(fā)中最重要的工具是Xcode,它是蘋(píng)果的集成開(kāi)發(fā)環(huán)境(IDE)Xcode提供了一些實(shí)用工具,用于創(chuàng)建和調(diào)試源代碼、編譯應(yīng)用程序,以及對(duì)應(yīng)用程序進(jìn)行性能調(diào)優(yōu)??梢詮腗acAppStore下載Xcode(可以MacAppleAppStore)SDKXcode版本的不斷更XcodeiOSSDKMacAppStore中了,同時(shí)也會(huì)在開(kāi)發(fā)者網(wǎng)站上提供預(yù)覽版供開(kāi)發(fā)者下載??傊?,如果想下載Xcode和iOSSDK的最新版本(非beta版),應(yīng)該使用MacAppStore。本書(shū)面向最新版SDK。在一些地方,我們會(huì)使用iOS7中引入的新函數(shù)或方法,它們可能與舊版SDK不兼容。當(dāng)然,出現(xiàn)這些情況時(shí)我們會(huì)特別指出。請(qǐng)從或者本書(shū)論壇上下載最新的源代碼①SDK發(fā)布時(shí),我們會(huì) 開(kāi)發(fā)者XcodeMac創(chuàng)建并運(yùn)行iPhone和iPad應(yīng)用。這個(gè)模擬器對(duì)于學(xué)習(xí)編寫(xiě)iOS程序極其有用。SDKiPhoneiOSAppStore99美元/AppStoreiOS設(shè)299美元//programs/ios(標(biāo)準(zhǔn)版計(jì)劃)/programs/ios(標(biāo)準(zhǔn)版計(jì)劃)iOS所支持的始終聯(lián)網(wǎng)的移動(dòng)設(shè)備(iPhone),iOSMacMac售程序)iPodtouchWi-FiiPad程序可能會(huì)在共享網(wǎng)絡(luò)中降低性能。開(kāi)發(fā)iOS應(yīng)用似乎有很高的門(mén)檻,但是蘋(píng)果99VisualStudio(IDE)iPhoneiPodtouchiPadiOS模擬器進(jìn)行測(cè)試,但并非所有程序都是如此。即便是那些可以在模擬器上運(yùn)行11.2iOS應(yīng)用程序有何如果從未使用Cocoa11.2iOS應(yīng)用程序有何如果從未使用Cocoa(或者它的前輩NeXTSTEP和OpenStep)寫(xiě)過(guò)程序,你CocoaTouch(iOS應(yīng)用程序的應(yīng)用程序框架)比較新奇。它與其他常用應(yīng)用程序框架(如用于構(gòu)建.NET或Java應(yīng)用程序的框架)之間存在CocoaTouchCocoaNeXTSTEPiOSSDKMacOSXCocoa中原樣移植過(guò)來(lái)的。即便是那些不同的類(lèi),也遵循相同的基本原則和相似的設(shè)計(jì)模式。但是,Cocoa和CocoaTouch之間還是有一些不同的。無(wú)論你的知識(shí)背景如何,都需要時(shí)刻牢記iOS11.2.1只能同時(shí)運(yùn)行一個(gè)在iOS中,任意時(shí)刻只能有一個(gè)應(yīng)用處于活動(dòng)狀態(tài)并顯示在屏幕上。從iOS開(kāi)始,用戶(hù)按下Home鍵后,應(yīng)用程序可以在后臺(tái)繼續(xù)運(yùn)行,但這也只限于少數(shù)CPUiOS11.2.2只有一個(gè)iOSiOS設(shè)備屏幕的大小,是固定11.2.3有限的訪問(wèn)iOS嚴(yán)格限制了應(yīng)用程序的訪問(wèn)權(quán)限。iOSiOS11.2.4有限的iOS嚴(yán)格限制了應(yīng)用程序的訪問(wèn)權(quán)限。iOSiOS11.2.4有限的響應(yīng)iOSHome鍵查看最近使用的應(yīng)用列表。如果用戶(hù)按HomeiOS返回主屏幕,應(yīng)用必須快速保存一切內(nèi)容并退出。如果沒(méi)有在5秒之內(nèi)保存必要11.2.5有限的屏幕iPhoneiPhoneiPhoneiPhoneiPhone像素×480像素×960iPhoneiPhone4640×1136像素。像素?cái)?shù)量有了極大的提高,但是屏幕的顯示空間卻沒(méi)有大的變化,iPhone所能提iPad1024像素×768大。下面來(lái)做一個(gè)有趣的對(duì)比,寫(xiě)作本書(shū)時(shí),蘋(píng)果最便宜的iMac的分辨率是1920像素×1080大。下面來(lái)做一個(gè)有趣的對(duì)比,寫(xiě)作本書(shū)時(shí),蘋(píng)果最便宜的iMac的分辨率是1920像素×1080像素,最便宜的筆記本電腦(11MacBookAir)的分辨率1366像素×76827LEDCinemaDisplay則支持高達(dá)2560像素×1440像素的超高分辨率。請(qǐng)注意,對(duì)于iPad而言,如果不出意外的話(huà),往后的iPad機(jī)型(iPad2以后的全尺寸iPad以及iPadMini屏幕的iPhone一樣,這塊2048像素×1536像素的屏幕的實(shí)際尺寸跟舊屏幕一11.2.6有限的系統(tǒng)512MB16GBiOS48KBiOS目前上市的iOS設(shè)備的物理內(nèi)存要么是512MB(iPhone4S、iPad2、一代iPadmini、iPodtouch5),要么是1024MB(iPhone5c、iPhone5S、iPadAir、iPadminiRetina),而且以后還會(huì)不斷加大。很大一部分內(nèi)存被用于屏幕緩沖區(qū)和可能會(huì)更少,尤其是現(xiàn)在其他的應(yīng)用可以在后臺(tái)運(yùn)行了)iOS存時(shí),卻還考慮另一個(gè)因素?,F(xiàn)代的計(jì)算機(jī)操作系統(tǒng)(比如OSX)會(huì)將未使用的用內(nèi)存時(shí),它仍然可以正常運(yùn)行。但是,iOS并不會(huì)將易失性?xún)?nèi)存(數(shù)據(jù))iOS設(shè)備中未使CocoaTouch11.2.7不支持垃11.2.7不支持垃圾之前提過(guò),CocoaTouch使用的是Objective-C,但是iOS卻并不支持一個(gè)Objective-C早在本世紀(jì)初就已經(jīng)有的關(guān)鍵特性:垃圾回收。是的,CocoaTouchiOS編寫(xiě)程序時(shí)需要手動(dòng)管理內(nèi)存,許多剛剛接觸這個(gè)平臺(tái)iOSObjective-CObjective-C對(duì)象占用內(nèi)存的問(wèn)題。MacOSX10.8ARC就成為了針對(duì)ARC11.3,怒。因此,本書(shū)也以“Hello,World!Xcode創(chuàng)建一iOS11.3,怒。因此,本書(shū)也以“Hello,World!Xcode創(chuàng)建一iOS應(yīng)用,在模擬設(shè)備屏幕上顯示文本“HelloWorld!”。我們將討論使用XcodeiOSiOSiOS11.3.1Xcode中創(chuàng)建項(xiàng)XcodeiOSSDK()下載本書(shū)的項(xiàng)目歸檔文件。還可以順便看一下本書(shū)的論壇(/)。本書(shū)的論壇是討論iOS開(kāi)發(fā)的好地02-HelloWorld前,需要啟動(dòng)XcodeMacStoreXcodeXcodeMac/ApplicationsXcode如果你很熟悉以前版本的Xcode,但是還沒(méi)用過(guò)Xcode5,就會(huì)發(fā)現(xiàn)有很多變化(大多是變得比舊版更好了)Xcode2-1ShowthiswindowShowthiswindowwhenMaciPhoneiPadiPodtouch等設(shè)備,么第一次啟動(dòng)Xcode時(shí)可能會(huì)看到一個(gè)對(duì)話(huà)框,詢(xún)問(wèn)你是否要使用該設(shè)備進(jìn)行開(kāi)發(fā)。就目前的學(xué)習(xí)來(lái)說(shuō),點(diǎn)擊Ignore(忽略)按鈕就可以了。否則就會(huì)顯示Organizer窗口即可。如果已經(jīng)加入了付費(fèi)的iOS開(kāi)發(fā)者計(jì)劃(iOSDeveloperProgram),iOS設(shè)備要?jiǎng)?chuàng)建新項(xiàng)目,可以選擇File?New?Project...(或者按下iOSOSXiOS用,所以選擇iOS部分的Application用,所以選擇iOS部分的Application(應(yīng)用)類(lèi)別,以顯示iOS應(yīng)用模板。圖2-2右上方面板中的每一個(gè)圖標(biāo)都表示一個(gè)獨(dú)立的項(xiàng)目模板,這些模板可以用作構(gòu)iOSSingleViewApplication(單視圖應(yīng)用)iPhoneiPad應(yīng)用界面.SingleView圖標(biāo)(2-2示),然后單擊Next按鈕,就會(huì)看到項(xiàng)目選項(xiàng)表單,如圖2-3所示。在這個(gè)表ProductName(產(chǎn)品名稱(chēng))CompanyIdentifier(公司標(biāo)識(shí))。Xcode會(huì)將這些內(nèi)容結(jié)合起來(lái),為應(yīng)用生成一個(gè)唯一的BundleIdentifier(包標(biāo)識(shí)符)OrganizationName(組織名稱(chēng))Xcode會(huì)自動(dòng)在你創(chuàng)建的每一個(gè)源代碼文件中以這個(gè)名稱(chēng)插入版權(quán)聲明。把ProductName設(shè)置為HelloWorld,組織名稱(chēng)為Apress,然后在CompanyIdentifier字段填寫(xiě)com.apress,如圖2-3所示。等你注冊(cè)了開(kāi)發(fā)者計(jì)劃并且了解授權(quán)文件(provisioningprofile)ClassPrefix(類(lèi)名前綴),Xcode為我們創(chuàng)建的所有類(lèi)的類(lèi)名前面。這么做是為了避免與蘋(píng)果(使用兩個(gè)字符的前綴)ClassPrefix(類(lèi)名前綴),Xcode為我們創(chuàng)建的所有類(lèi)的類(lèi)名前面。這么做是為了避免與蘋(píng)果(使用兩個(gè)字符的前綴)Objective-CBIDBIDBeginningiOSDevelopment如,可能有很多類(lèi)會(huì)被命名為MyViewController,然而被命名為BIDMyViewController的類(lèi)就很少了,這就大大降低了命名沖突的可能性。Devices(即設(shè)備類(lèi)別)XcodeiPhoneiPodtouchiPad,或是能夠在所有iOS設(shè)備上運(yùn)行的通用應(yīng)用。在設(shè)備類(lèi)別中選擇iPhone(如果它還沒(méi)有被選的屏幕尺寸相同)iPhoneiPodtouch(iPadFinderXcodeCreateCreatelocalFinderXcodeCreateCreatelocalgitrepositoryforthisproject(倉(cāng)庫(kù))GitXcodeGitGit(SourceControlManagementSCM)XcodegitCreate11.3.2Xcode項(xiàng)目窗Xcode2-5iOSXcode2-5iOSXcode5Xcode3.xXcode4.x1.工具Xcode項(xiàng)目窗口的頂部區(qū)域是工具欄(2-6)(scheme)工具欄中間的大方框是活動(dòng)視圖(activityview)工具欄中間的大方框是活動(dòng)視圖(activityview)輔助編輯器(assistanteditor)文件??梢允謩?dòng)指定每個(gè)面板的內(nèi)容,也可以讓Xcode自動(dòng)判斷進(jìn)而顯示與Objective-C類(lèi)的實(shí)現(xiàn)文件(.m文件),Xcode就會(huì)自動(dòng)在右側(cè)面板中顯示這個(gè)類(lèi)的頭文件(.h文件)Xcode版本編輯器(versioneditor)Time類(lèi)似的對(duì)比視圖,這個(gè)對(duì)比視圖可以跟Subversion和git等版本控制系統(tǒng)協(xié)同工2.導(dǎo)航2.導(dǎo)航導(dǎo)航視圖開(kāi)關(guān)把它隱藏的話(huà),請(qǐng)?jiān)俅螌⑵滹@示出來(lái)。導(dǎo)航視圖共提供了8個(gè)面項(xiàng)目導(dǎo)航面板(projectnavigator):這個(gè)面板列出了項(xiàng)目用到的所有文件,如圖2-7所示??梢园讶魏蜗胍膬?nèi)容引用放在這里,從源代碼文件到圖片文件、數(shù)據(jù)模型、屬性列表文件(plist文件,2.1.2節(jié)會(huì)介紹),甚至是其以編輯(Xcode知道如何編輯這種文件)符號(hào)導(dǎo)航面板(symbol符號(hào)導(dǎo)航面板(symbolnavigator):工作區(qū)中定義的符號(hào)(symbol)2-8所示。從根本上說(shuō),符號(hào)就是那些編Objective-C搜索導(dǎo)航面板(Findnavigator搜索導(dǎo)航面板(Findnavigator):使用這個(gè)導(dǎo)航面板可以對(duì)工作區(qū)中的所有文件執(zhí)行搜索,如圖2-9所示。面板頂部有多層下拉菜單,F(xiàn)ind(查詢(xún))功能也Replace(替換)功能,此外還可以對(duì)輸入的文本采用不同的搜索方式。測(cè)試導(dǎo)航面板(Testnavigator):測(cè)試導(dǎo)航面板(Testnavigator):Xcode果(2-11所示)調(diào)試導(dǎo)航面板(debugnavigator)2-12Xcode5UserGuide文檔的(stackframe)(stackframe)面板(breakpointnavigator):可以在斷點(diǎn)導(dǎo)航面板中查看已設(shè)置的所有斷點(diǎn),如圖2-13所示。顧名思義,斷點(diǎn)會(huì)指向?qū)е聭?yīng)用停止運(yùn)行(或者跳出)的代碼部11.3.3Xcode跳轉(zhuǎn)在編輯器的頂部,你會(huì)找到一個(gè)叫作跳轉(zhuǎn)欄2-15可顯示的子菜單包括最近的文件(RecentFiles)、未保存的文件(UnsavedFiles)、關(guān)聯(lián)文件(Counterparts)、父類(lèi)(Superclasses可顯示的子菜單包括最近的文件(RecentFiles)、未保存的文件(UnsavedFiles)、關(guān)聯(lián)文件(Counterparts)、父類(lèi)(Superclasses)、子類(lèi)(Subclasses)、兄弟類(lèi)(Siblings)、類(lèi)別(Categories)2-15BIDAppDelegate.m,Xcode511.3.4實(shí)用工具Xcode11.3.5界面構(gòu)Xcode的早期版本包含一個(gè)被稱(chēng)為界面構(gòu)建器(11.3.5界面構(gòu)Xcode的早期版本包含一個(gè)被稱(chēng)為界面構(gòu)建器(InterfaceBuilder)的界面設(shè)XcodeXcode11.3.6Xcode4(compiler)和底層調(diào)試器(low-leveldebugger)過(guò)去幾年蘋(píng)果一直使用GCC(GNUCCompiler)作為底層編譯器。不過(guò)最近LLVM(LowLevelVirtualMachine,底層虛擬機(jī))LLVMGCC快。除了代碼生成速度快之外,LLVM還知道更多與代碼相關(guān)的信息,所以它能生成更智能、更精確的錯(cuò)誤信息和警告。Xcode對(duì)LLVM也有很好的集成,后者為前者注入了強(qiáng)大的能量。Xcode名稱(chēng)拼寫(xiě)錯(cuò)誤、括號(hào)匹配錯(cuò)誤、分號(hào)遺漏等問(wèn)題。此外,LLVM還提供了一個(gè)復(fù)雜的靜態(tài)分析器(staticanalyzer),它可以?huà)呙枘愕拇a以查找各種潛在問(wèn)題,Objective-CLLVM11.3.7深入研究XcodeHelloWorld8個(gè)導(dǎo)航面板圖標(biāo)(位于工作區(qū)左側(cè))中最左邊的那個(gè)圖標(biāo)(command+1command+88command+1command+88command+1面板,command+2對(duì)應(yīng)符號(hào)導(dǎo)航面板,以此類(lèi)推,command+8對(duì)應(yīng)日志導(dǎo)航面板。項(xiàng)目導(dǎo)航面板中的第一個(gè)條目就是項(xiàng)目名,本例為HelloWorld。這個(gè)條目表示整個(gè)項(xiàng)目,可以做些與項(xiàng)目相關(guān)的配置。單擊這個(gè)條目,就可以在Xcode的編2-7HelloWorld下一些子文件夾(Xcode中稱(chēng)為組)SupportingFiles:HelloWorld文件夾內(nèi)的某個(gè)文件夾,包含了項(xiàng)目中必需的Objective-CSupportingFiles文件夾上花費(fèi)太多時(shí)間。創(chuàng)建一個(gè)新的iPhone應(yīng)用項(xiàng)目后,這個(gè)文件夾就會(huì)包含4個(gè)HelloWorld-Info.plist:這個(gè)文件包含應(yīng)用的件。事實(shí)上,最好不要碰這個(gè)文件,除非你真的知道自己在做什么。代表precompiledheader,意思是預(yù)編譯頭文件)。通常,這個(gè)文件中包含的頭Xcode代表precompiledheader,意思是預(yù)編譯頭文件)。通常,這個(gè)文件中包含的頭Xcode間(BuildRun可以對(duì)項(xiàng)目進(jìn)行編譯)XcodeHelloWorld文SupportingFiles文件夾,里面是構(gòu)建并運(yùn)行單元測(cè)FrameworksFrameworks7Products:這個(gè)文件夾包含構(gòu)建項(xiàng)目時(shí)生成的應(yīng)用。展開(kāi)Products文件夾,HelloWorld.app的文件,這就是這個(gè)項(xiàng)目創(chuàng)建出來(lái)的應(yīng)用。它HelloWorldTests.xctest的文件,它表示測(cè)試代碼。這些文件都被稱(chēng)為構(gòu)建目(buildtarget)。由于我們還沒(méi)有構(gòu)建這個(gè)應(yīng)用,所以它們都顯Xcode注意:導(dǎo)航面板區(qū)域中的“文件夾”并不一定與Mac文件系統(tǒng)上的文件夾一一對(duì)應(yīng)。它們只是Xcode中的邏輯分組,用于對(duì)所有的東西進(jìn)行組織,以便在應(yīng)至可以把它們放到項(xiàng)目文件夾外部。XcodeXcodeClassesXcodeClasses11.3.8界面構(gòu)建器在項(xiàng)目窗口的項(xiàng)目導(dǎo)航面板中展開(kāi)HelloWorld組(如果尚未展開(kāi)),然后選擇Main.storyboard文件。然后這個(gè)文件就會(huì)在編輯器面板中打開(kāi)(參見(jiàn)圖2-16)iPhone屏幕,可以在這個(gè)背景上編輯界面。這就是Xcode的界面構(gòu)建器(有時(shí)被稱(chēng)為IB),可以在這里設(shè)計(jì)應(yīng)用的用戶(hù)界面。界面構(gòu)建器歷史悠久,它于1988年面世,曾用于開(kāi)發(fā)NeXTSTEP、OpenStep、MacOSX應(yīng)用,現(xiàn)在也用于iPhone和iPad等iOS設(shè)備。之前已經(jīng)提到過(guò),界面構(gòu)建器過(guò)去是一個(gè)獨(dú)立的應(yīng)用(Xcode時(shí)會(huì)自動(dòng)安裝界面構(gòu)建器),XcodeXcode文件文件格界面構(gòu)建器支持不同的文件類(lèi)型:最初的版本使用擴(kuò)展名為nib的二進(jìn)制格xibXML的衍生格式。兩者包含了完全一樣的文檔內(nèi)容,但xib格式的版本卻是基于文本格式的,這樣做有很多優(yōu)勢(shì),尤其是在你使用版本控制系統(tǒng)的時(shí)候。注意iOS項(xiàng)目模板全都默認(rèn)使用.xib擴(kuò)展名,但是在最初的20年里,所有的界面構(gòu)建器文件都使用.nib擴(kuò)展名,結(jié)果就是大部分開(kāi)發(fā)者都把界面構(gòu)建器文件稱(chēng)為“nib文件”。不管文件實(shí)際使用的是.xib擴(kuò)展名還是.nib擴(kuò)展名,都被稱(chēng)為“nib文件”。事實(shí)上,蘋(píng)果公司仍然在其文檔中使用“nib”和“nib文件”這兩個(gè)術(shù)語(yǔ)。一個(gè)nib文件可以包含任意數(shù)量的對(duì)象。但iOSnib文件負(fù)責(zé)包含一個(gè)視圖(一般都是全屏視圖)以及nibiOS最近幾年,界面構(gòu)建器開(kāi)始支持另一種文件類(lèi)型,即分鏡(storyboard)將分鏡想像成一個(gè)“nib文件”(meta-nibfile),nib將分鏡想像成一個(gè)“nib文件”(meta-nibfile),nib文件不同,分鏡不會(huì)一次加載所有的內(nèi)容,而是在你需要加載某視圖和控nib文件我們都會(huì)使用到。在當(dāng)前的示例中,Xcode為我們創(chuàng)建了一個(gè)分鏡,所以我們先來(lái)看看它的用法。iOS一樣。Main.storyboard文件會(huì)在應(yīng)用啟動(dòng)時(shí)自動(dòng)進(jìn)行加載(nibiPhone屏幕尺寸(雖然也可能是其他尺寸)ViewController(視圖控制器)FirstResponder(第一響應(yīng)者)。目前請(qǐng)先忽略掉FirstResponder示分鏡的所有內(nèi)容,并由相關(guān)的場(chǎng)景(scene)作為容器來(lái)進(jìn)行劃分。在本示例中只有一個(gè)場(chǎng)景,它的名稱(chēng)是ViewControllerScene。你會(huì)看到它包含了一個(gè)名稱(chēng)為View示分鏡的所有內(nèi)容,并由相關(guān)的場(chǎng)景(scene)作為容器來(lái)進(jìn)行劃分。在本示例中只有一個(gè)場(chǎng)景,它的名稱(chēng)是ViewControllerScene。你會(huì)看到它包含了一個(gè)名稱(chēng)為ViewControllerView的子項(xiàng)(還有其他一ViewUIViewUIView戶(hù)界面元素(包括按鈕、文本框、標(biāo)簽等)都繼承自UIView。但是,本書(shū)使用的術(shù)語(yǔ)視圖(view)UIViewView圖標(biāo),Xcode會(huì)自動(dòng)對(duì)我們之前所說(shuō)的iPhone尺寸屏幕的矩形進(jìn)行高亮。在這2-17所示。如果沒(méi)有看到這個(gè)實(shí)用工具視圖,可以單擊工具欄上三個(gè)View按鈕中最右邊的那個(gè),選擇View?Utilities?ShowUtilities,或者按下option+command+0實(shí)用工具視圖的下半部分稱(chēng)為庫(kù)面板(librarypane),或者簡(jiǎn)稱(chēng)為庫(kù)。庫(kù)是可重用對(duì)象的集合,可以在自己的程序中使用它們。庫(kù)面板頂部工具欄中的4實(shí)用工具視圖的下半部分稱(chēng)為庫(kù)面板(librarypane),或者簡(jiǎn)稱(chēng)為庫(kù)。庫(kù)是可重用對(duì)象的集合,可以在自己的程序中使用它們。庫(kù)面板頂部工具欄中的44文件模板庫(kù)(filetemplatelibrary):這部分包含一些文件模板,向項(xiàng)目中添加Objective-C類(lèi),就可以從文件模板庫(kù)中拖出一個(gè)Objective-C類(lèi)文件。代碼片段庫(kù)(codesnippetlibrary):這部分包含一些精選的代碼片段,可以直O(jiān)bjective-C的快速枚舉語(yǔ)法?沒(méi)關(guān)系,就從iOS界面的任何對(duì)象。本書(shū)的示例程序會(huì)大量使用對(duì)象注意對(duì)象庫(kù)中的對(duì)象主要來(lái)自于iOS的UIKit框架,這個(gè)框架中包含的對(duì)象可UIKit注意對(duì)象庫(kù)中的對(duì)象主要來(lái)自于iOS的UIKit框架,這個(gè)框架中包含的對(duì)象可UIKitCocoaTouchAppKitCocoa在很多明顯的不同。不過(guò),NSStringNSArray等屬于Foundation框架的類(lèi),是Cocoa和CocoaTouch共有的。注意庫(kù)面板底部的搜索框。想找一個(gè)按鈕控件?那就在搜索框里輸入button,這時(shí)庫(kù)會(huì)只顯示名字中含有“button”的項(xiàng)。搜索現(xiàn)在試著使用界面構(gòu)建器。單擊庫(kù)頂部的對(duì)象庫(kù)圖標(biāo)(看起來(lái)像個(gè)立方體)TableViewcontrol+option+command+3在庫(kù)中找到Label。它大約位于列表的頂部。然后,把標(biāo)簽控件拖放到之前介紹過(guò)的視圖中。(dock中單擊一下View圖標(biāo)。)當(dāng)把光標(biāo)移到視圖上面時(shí),光標(biāo)就會(huì)變成一個(gè)綠色的加號(hào)指示符(Finder中它表示“我正在復(fù)制某些內(nèi)容”)2-18正在編輯的視圖中,就能將其作為子視圖添加到主視圖(View的視圖)LabelUILabel簽,鍵入文本LabelUILabel簽,鍵入文本,File?Save(command+S)iOSiOS選項(xiàng)。在它下面有一整段標(biāo)題為iOSSimulator的列表,里面列出了你可以在iOS模擬器中使用的所有型號(hào)的設(shè)備。選擇iPhoneRetina(4inch),這樣我們的應(yīng)iPhone5的配置運(yùn)行了。如果參與了蘋(píng)果公司的付費(fèi)iOSiPhoneProduct?Run(command+R)2-19Product?Run(command+R)2-19Mac與上面講的有所不同??偠灾?,如果想要在iPhoneiPadiPodtouch上構(gòu)建并運(yùn)行應(yīng)用,就必須注冊(cè)蘋(píng)果公司的iOS開(kāi)發(fā)者計(jì)劃并支付一些費(fèi)用,然后Xcode做一些恰當(dāng)?shù)呐渲?。加入開(kāi)發(fā)者計(jì)劃后,蘋(píng)果公司會(huì)提供一些必要iPhoneiPad返回Xcode了。Xcode和模擬器是兩個(gè)互相獨(dú)立的應(yīng)用。提示檢查完應(yīng)用后,XcodeXcode屬性修XcodeHelloWorldXcodeHelloWorld2-option+command+1option+command+2RunObjective-CObjective-C對(duì)象(與在代碼中所做的一樣),11.4實(shí)現(xiàn)基本HelloWorld11.4實(shí)現(xiàn)基本HelloWorldCocoaTouch3-1所示。用戶(hù)按下一個(gè)按鈕時(shí),標(biāo)簽上的文本會(huì)相應(yīng)地改變。這看上去是一個(gè)相當(dāng)簡(jiǎn)單的示例,但它展示了在iOSCocoaTouchGUI元素使用帶樣式的文本styledtext)11.4.1MVC在深入學(xué)習(xí)之前,先介紹一些基本理論。CocoaTouch設(shè)計(jì)者們采用MVC模式(Model-View-Controller)作為指導(dǎo)原則。在基于圖形用MVC可以非常合乎邏輯地對(duì)代碼進(jìn)行拆分。目前,幾乎所有面向?qū)ο缶幊炭蚣芏荚谝欢ǔ潭壬辖梃b了MVC的設(shè)計(jì)理念,但很少有像CocoaTouchMVCMVC3MVC3MVC3MVC3CocoaTouch(甚至創(chuàng)建)Objective-C序數(shù)據(jù),也可以使用CoreData構(gòu)建一個(gè)數(shù)據(jù)模型。本章的應(yīng)用程序不會(huì)創(chuàng)建任義的類(lèi)(NSObject子類(lèi)),UIKit控制器類(lèi)(UIViewController,稍后就會(huì)介紹)的子類(lèi)。這么說(shuō)吧,通過(guò)繼承CocoaTouchUIKitMVC原則的情況。在開(kāi)發(fā)時(shí)牢記這個(gè)概念,就能夠創(chuàng)建出簡(jiǎn)潔而易于維護(hù)的代11.4.2創(chuàng)建現(xiàn)在開(kāi)始創(chuàng)建下一個(gè)Xcode項(xiàng)目。這個(gè)項(xiàng)目與上一章的項(xiàng)目使用相同的模板SingleViewApplication。從這個(gè)簡(jiǎn)單的模板入手,更容易理解視圖和控制器之間的Xcode現(xiàn)在開(kāi)始創(chuàng)建下一個(gè)Xcode項(xiàng)目。這個(gè)項(xiàng)目與上一章的項(xiàng)目使用相同的模板SingleViewApplication。從這個(gè)簡(jiǎn)單的模板入手,更容易理解視圖和控制器之間的XcodeFile?New?NewProject...(shift+command+N)SingleViewApplicationNextProductNameButtonFunOrganizationNameIdentifierClassPrefix這三個(gè)字段的值默認(rèn)與上一個(gè)項(xiàng)目相同(Apress、,DevicesiPhoneiPhone3-2點(diǎn)擊Next,XcodeCreategitrepository選項(xiàng),可以根據(jù)自己的喜好來(lái)決11.4.3視圖控是用戶(hù)界面)XcodeButton是用戶(hù)界面)XcodeButtonFun分組應(yīng)該已經(jīng)展開(kāi)了(3-3所示。Button4個(gè)源代碼文件(以.h或者.m結(jié)尾)storyboard文件和一個(gè)包xcassets4個(gè)源代碼文件實(shí)現(xiàn)了應(yīng)用程序所需的兩個(gè)類(lèi):應(yīng)用程序委托(applicationdelegate),以及用于這個(gè)應(yīng)用僅有的一個(gè)視圖的視圖控制器。再次提醒一下,Xcode為所有的類(lèi)都自動(dòng)添加了之前指定的類(lèi)名前綴(BID)XcodeBIDViewControllerBIDViewController部分則表明這個(gè)類(lèi)是一個(gè)視圖控制器。點(diǎn)擊分組和文件(Groups&Files)面板中的BIDViewControllerUIViewControllerUIViewControllerUIKitXcode 輸出接口和操作方2Xcode 輸出接口和操作方2Xcode(outlet)nib了。本章會(huì)詳細(xì)介紹這個(gè)方法。另一方面,可以對(duì)nib文件中的界面對(duì)象進(jìn)行設(shè)置,以觸發(fā)控制器類(lèi)中的某些特殊方法。這些特殊方法稱(chēng)為操作方法(actionmethod),或者簡(jiǎn)稱(chēng)為操作(action)。例如,可以在界面構(gòu)建器中進(jìn)行設(shè)置,Xcode定好,然后再使用界面構(gòu)建器與將它們與相應(yīng)的代碼關(guān)聯(lián)起來(lái)。Xcode的輔助視iOS輸出接Objective-CIBOutlet(classextension)這個(gè)例子聲明了一個(gè)名為myButton的輸出接口,可以讓它指向界面構(gòu)建器中的任何按鈕。IBOutletObjective-C(classextension)這個(gè)例子聲明了一個(gè)名為myButton的輸出接口,可以讓它指向界面構(gòu)建器中的任何按鈕。IBOutletObjective-C內(nèi)置的關(guān)鍵字,僅僅是一個(gè)簡(jiǎn)單的C是不是感到很困惑?對(duì)于編譯器來(lái)說(shuō),IBOutlet什么作用都沒(méi)有。它唯一的Xcodenibnib文件中的對(duì)象進(jìn)行關(guān)聯(lián)的屬性,都必須使用IBOutlet關(guān)鍵字進(jìn)行聲明。幸好,Xcode能夠自動(dòng)創(chuàng)建輸出接口。隨著時(shí)間的推移,蘋(píng)果公司改變了輸出接口的聲明1關(guān)鍵字在CocoaNeXTSTEP2IBOutlet書(shū)中的代碼,把IBOutletGCCLLVM書(shū)中的代碼,把IBOutletGCCLLVM(LowLevelVirtualMachine,LLVMIBOutlet關(guān)鍵字放在屬性聲明中,所以我們遵循這一方式。希望你能了解這些歷史背景,以防遇到比較老的代碼(IBOutlet關(guān)鍵字出現(xiàn)在實(shí)例變量的聲明中)而迷惑不解。要了解Objective-C屬性的更多信息,可以閱讀由ScottKnasterWaqarMalikMarkDalrympleObjective-C基礎(chǔ)教程(2IntroductiontotheObjective-CProgrammingLanguage”(/2.操作IBAction的特殊方法,返回類(lèi)型nib文件中的控件觸發(fā)。操作方法的聲明通常如IBActionvoid。返回類(lèi)型為void的方法不返回任何值。而且,操作方法要么不接受任何參數(shù),要么只接受一個(gè)參數(shù)(sender)。sendersender指向觸發(fā)該方法的對(duì)象。例如,如sender指向觸發(fā)該方法的對(duì)象。例如,如果用戶(hù)按下某個(gè)按鈕時(shí)觸發(fā)了這個(gè)操作法,那么sendersender Cocoa和senderiOS代碼(尤其在項(xiàng)目導(dǎo)航面板中單擊BIDViewController.m,打開(kāi)這個(gè)實(shí)現(xiàn)文件??梢钥磛iewDidLoaddidReceiveMemoryWarning等方法的樣板代碼,這是由創(chuàng)建項(xiàng)目時(shí)選擇的項(xiàng)目模板提供的。在UIViewController的子類(lèi)中Xcode提供了這些基本的代碼片段,如果需要的話(huà),Objective-C分類(lèi)(category)聲明,可以在其中聲明方法和屬性,但是這些方法implementation塊中使用。本書(shū)后面會(huì)用到類(lèi)擴(kuò)展,但是現(xiàn)在并不需要,所以應(yīng)該把這個(gè)空的@interface.@end塊刪除。完成之后,實(shí)Main.storyboard的界面構(gòu)建器中打開(kāi)應(yīng)用程序的視圖(3-4Main.storyboard的界面構(gòu)建器中打開(kāi)應(yīng)用程序的視圖(3-4)。你可能還記得上一章提到,3-1參數(shù)(之前的“操作方法”一節(jié)討論過(guò))來(lái)區(qū)分這兩個(gè)按鈕。除了操作方Xcode1.添加按鈕和操作1.添加按鈕和操作方Xcodecontrol+option+command+3)打開(kāi)對(duì)象庫(kù)。在對(duì)象庫(kù)的搜索框中輸入U(xiǎn)IButton(4UIBuUIButton了),3-5把3-1引導(dǎo)線可以幫助你遵循iOSHumanInterfaceGuidelines(通常簡(jiǎn)稱(chēng)為HIG)。蘋(píng)果的3-1引導(dǎo)線可以幫助你遵循iOSHumanInterfaceGuidelines(通常簡(jiǎn)稱(chēng)為HIG)。蘋(píng)果的HIG可以幫助用戶(hù)更好地設(shè)計(jì)iPhone和iPad應(yīng)用程序。HIG會(huì)告訴你應(yīng)該包含了很多有用的信息,這是每個(gè)iOS開(kāi)發(fā)者都應(yīng)該了解的??梢栽谝韵碌刂氛译p擊新添加的按鈕,可以編輯按鈕標(biāo)題,將其標(biāo)題設(shè)為L(zhǎng)eft?,F(xiàn)在該Xcode發(fā)揮作用了。選擇View?AssistantEditor?ShowAssistantEditor(或者按下option+command+return)7個(gè)按鈕,可以點(diǎn)擊最左邊一組按鈕中間的按鈕,顯示或者隱藏輔助編輯器(3-6)輔助編輯器會(huì)出現(xiàn)在編輯面板的右側(cè),除非你特別指定輔助編輯器的位置(BIDViewController.h如果你的顯示器屏幕比較小(MacBookAir上的顯示器),utility視圖或項(xiàng)目導(dǎo)航面板,從而獲得足夠的空間,有效地使用輔助編輯器??梢酝ㄟ^(guò)項(xiàng)目導(dǎo)航窗口右上角的3個(gè)視圖按鈕方便地完成這個(gè)操作(參見(jiàn)圖3-6)。ViewControllerXcodeViewControllerXcodeBIDViewControllerUIViewControllerXcode在上面的跳轉(zhuǎn)欄中選擇BIDViewController.h文件。首先,點(diǎn)擊新添加的按鈕以選control鍵不放開(kāi),接著用鼠標(biāo)把按鈕拖向輔助編輯器編輯器中的頭文件、File’sOwner圖標(biāo)、編輯面板左側(cè)的任何其他圖標(biāo),甚至是編輯區(qū)域中的其他對(duì)象。如果把指針移動(dòng)到@interface和@end關(guān)鍵字之間(參見(jiàn)圖3-7),就會(huì)彈出一個(gè)灰色的提示框,告訴你如果在這里放開(kāi)鼠標(biāo)的話(huà)可以插入編輯器中的頭文件、File’sOwner圖標(biāo)、編輯面板左側(cè)的任何其他圖標(biāo),甚至是編輯區(qū)域中的其他對(duì)象。如果把指針移動(dòng)到@interface和@end關(guān)鍵字之間(參見(jiàn)圖3-7),就會(huì)彈出一個(gè)灰色的提示框,告訴你如果在這里放開(kāi)鼠標(biāo)的話(huà)可以插入NSArray3-8ConnectionOutletActionXcode,我們要?jiǎng)?chuàng)建的是一個(gè)操3-9NamereturnreturnTabTypeUIButtonididObjective-CTypeididObjective-CTypeidid即可。在本例中,我們只會(huì)通過(guò)按鈕對(duì)象調(diào)用這個(gè)方法,所以應(yīng)該將其改為UIButtonXcode和LLVM知道我們的意圖。現(xiàn)Type下面還有兩個(gè)字段,保留它們的默認(rèn)值即可。在Event字段中指定什么時(shí)候調(diào)用這個(gè)方法。默認(rèn)值TouchUpInside僅會(huì)在用戶(hù)的手指離開(kāi)屏幕(且用戶(hù)的手指在離開(kāi)屏Argumentssenderreturn就是XcodeBIDViewController.hBIDViewController.mXcodeXcodeBIDViewController.mXcodeXcodeMain.storyboard標(biāo)題改為助編輯器。無(wú)所謂是當(dāng)前是.h文件還是.mbuttonPressed:buttonPressed:ConnectAction的灰色提示框(3-10)。XcodebuttonPressed:方法。再說(shuō)一遍,如果用這種方式把按鈕拖曳到實(shí)現(xiàn)文件(.m文件)中的操作方法,效果也是一樣的。也就是說(shuō),按住control鍵拖曳按鈕時(shí),BIDViewController.hbuttonPressed方法聲明上,也可以拖向BIDViewController.m文件中的buttonPressed方法實(shí)現(xiàn)上。Xcode真是太智能2.添加標(biāo)簽和輸2.添加標(biāo)簽和輸出接LabelLabel(11)。把Label拖曳到用戶(hù)界面中,放置在兩個(gè)按鈕的上方。然后,調(diào)整標(biāo)簽的標(biāo)簽中的文本默認(rèn)是左對(duì)齊的,但是我們希望它居中對(duì)齊。選擇View?UtilitiesShowAttributesInspector(option+command+4)打開(kāi)屬性檢查器(3-12)Alignment中了標(biāo)簽的文本),deletereturn鍵提交更改。這樣一來(lái),標(biāo)簽在未選中時(shí)就看不到了,不過(guò)不用擔(dān)心,BIDViewController.hBIDViewController.hcontrol3-13你將再次看到圖3-8所示的彈出窗口。我們要?jiǎng)?chuàng)建一個(gè)輸出接口,所以保留ConnectionOutlet。并且要為這個(gè)輸出接口指定一個(gè)描述性的名稱(chēng),以便在編寫(xiě)代碼時(shí)能夠知道這個(gè)輸出接口的作用。在Na
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年眉山貨運(yùn)資格證模擬考試新題庫(kù)
- 電梯加件協(xié)議書(shū)(2篇)
- 電力需求預(yù)測(cè)合同(2篇)
- 2024-2025學(xué)年四年級(jí)語(yǔ)文上冊(cè)第五單元橋12橋之思備課教案北師大版
- 湘教版數(shù)學(xué)七年級(jí)下冊(cè)2.2.2《運(yùn)用完全平方公式進(jìn)行計(jì)算》聽(tīng)評(píng)課記錄
- 律師事務(wù)所年度檢查考核總結(jié)
- 第三季度財(cái)務(wù)工作總結(jié)
- 采購(gòu)計(jì)劃年終工作總結(jié)
- 聽(tīng)評(píng)課記錄二年級(jí)語(yǔ)文
- 領(lǐng)導(dǎo)給員工的評(píng)語(yǔ)與希望
- 數(shù)獨(dú)6宮格300試題
- 24年注安-管理的題
- 三化一穩(wěn)定嚴(yán)進(jìn)嚴(yán)出專(zhuān)案報(bào)告
- 2024過(guò)敏性休克搶救要點(diǎn)(附圖表)
- 2024至2030年中國(guó)心理咨詢(xún)行業(yè)市場(chǎng)預(yù)測(cè)與投資規(guī)劃分析報(bào)告
- 國(guó)際貿(mào)易地理 全套課件
- 廣西2024年高考物理模擬試卷及答案1
- 2024年廣東省中考?xì)v史真題(含解析)
- GB/T 20878-2024不銹鋼牌號(hào)及化學(xué)成分
- 某房屋建筑工程監(jiān)理大綱
- JGJ52-2006 普通混凝土用砂、石質(zhì)量及檢驗(yàn)方法標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論