[Powered by Google Translate] [講座] [IOS：編寫應用程序像老闆]
[和湯米MacWilliam] [哈佛大學]
這是CS50。[CS50.TV]
>> 好吧，大家好，歡迎到iOS：編寫應用程序，像老闆。
本次研討會將重點上寫的iPhone應用程序
，從而編寫應用程序的iPad，所以我們基本上要穿行
一對夫婦不同的例子，如何使一個應用程序，一個簡單的遊戲，如井字，
或者，如果你更感興趣的是一個應用程序，如某種形式的新聞閱讀器
的東西，我會談談，以及與互聯網交互。
這裡我們簡要的議程。
>> IOS應用程序是用的語言叫Objective-C的，
所以這是有點類似C，但沒有真正的所有，
因此，我們會說一點點關於語言本身
那麼如何來構建iPhone應用程序使用名為Xcode這個應用程序，
如果你還沒有下載，還覺得現在開始下載。
這是幾千兆字節。
在App Store上應該是免費的，所以你需要有一個蘋果
理想情況下運行最新版本的OS X。
如果你沒有，沒有問題。
我們有在科學中心提供的Mac電腦供您使用
安裝了XCode，所以隨意使用這些發展。
如果你想使一個應用程序，但不會有一個蘋果，不用擔心。
有大量的校內資源，為。
這樣的話，我們要去不同的應用程序，你可以覆蓋更大的例子。
Objective-C是技術上被稱為C的一個超集
這意味著，任何C代碼是有效的Objective-C代碼。
這意味著，我們種管上一些額外的功能，C.錄音
這些功能包括一些沒有寫的malloc再次，感謝上帝，
不必擔心那些愚蠢的指針，並釋放他們和所有的東西
你恨C，和它的種了，在Objective-C。
>> 現在，Objective-C的標準庫有一個更大的，
所以你的Objective-C的免費內了更多的功能。
記住，當我們在寫PHP，我們注意到，我們就從
這個最小的語言，所有這些瘋狂的事情你可以做的巨大的圖書館。
同樣的事情發生在iOS。
有對象的東西，如佛歷，真的什麼
你可能認為在Objective-C的實現可能已經存在。
Objective-C的目標的一部分，被引用的東西
所謂的面向對象編程。
這是一個新的概念，但我們實際上大多學會
這些概念已經有很多。
面向對象編程背後的想法是，你要構建
您的代碼周圍有很多這些東西稱為類，
這些類的真正榮耀的結構。
內部的結構，我們基本上可以說這裡是一個東西，
這個東西可以有成員。
例如，一個鏈接的列表中的一個節點可以有其他的事情
像的值，在列表中的下一個節點的指針，
在一起的指針，該值由一個結構的一個實例。
類是非常相似的，除了
類也有他們內部的功能。
當我們宣布一個結構，我們只能說整數n或節點*未來。
>> 現在用的Objective-C實際上，我們可以把功能
裡面的那些東西。
類可以做的另一件事是，他們可以從其他類繼承的數據。
例如，我們將著眼於一堆內置的Objective-C類。
其中一個可能的類，它代表一個屏幕的視圖，
，所以說，我要實現我自己的看法
我們基本上說對在蘋果的人，可能是非常好的人，
為我寫了這個類，它處理的事情，比如顯示按鈕
或呈現在屏幕上，我們將是非常痛苦的
實現所有的功能我們自己，所以通過簡單的
繼承的數據，我們可以說，你沒有在這個類中的一切
我也希望我的類的內部，然後我會做一些其他的東西，
即實​​現一個應用程序。
這是什麼字繼承的意思。我們會看到一個更具體的例子。
>> 最後，與面向對象編程的關鍵是，
它會導致數據的封裝。
我們在一些問題設置，我們可以有這些大的，全局變量
和全局無處不在，這就是我們會保持跟踪狀態。
帶類，我們就可以開始封裝內的對象的信息。
如果我們有我們的應用程序的一個屏幕上，我們並不真正需要的任何數據從
在我們的應用程序內的，另一個屏幕，
等封裝在類的東西，這實際上導致
到更好的代碼設計，這是可能的，與一些附加功能。
Objective-C的。
預警，為Objective-C的語法是香蕉。
這是什麼之前，我們已經看到，
所以它是一點點的學習曲線已經習慣了
這到底是什麼意思呢？
但是，一旦你過去，最初的學習曲線，這是真的，真的很光滑
開始編寫應用程序。
>> 要聲明一個類，這裡要說的是我的課，它的存在，
也許這裡有一些事情，我要定義後，
我會說接口。
我會說接口。我想給我的類的名稱。
再後來又在其他地方，我會說結束，
一切都在@接口和@結束的之間的
將是我的課。
這將是我們的。h文件裡面有什麼。
就像在C h文件，從根本上說，這裡有一些事情，會存在。
我不一定告訴你他們還做什麼，
但編譯器需要知道它們的存在。
後來我們。米內的文件，因為m的Objective-C的
我們要定義這些類的。
就像我們的文件，我們提供功能的實現。
在我們的m文件，我們要在這裡說的是什麼的全部功能
裡面的我的課，他們都做。
最後，內​​部的結構，我們可以說，這些花括號內
INT n或節點*下，
在Objective-C，我們要使用關鍵字@財產，
這是怎麼回事定義屬性，
非功能的一部分，我的課。
>> Objective-C中調用函數是香蕉。
當我們宣布我們說了些什麼，如int foo的功能在C
和開放的括號，然後把它的參數列表。
這是聲明的方法或函數看起來像在Objective-C的。
如果我要聲明一個函數或方法
我說的方法實際上是一個函數，這是一個類的成員，
因此種可互換的，但不是真的，
裡面有我的方法，我想創建一個新的方法。
這將返回任何結果，所以這將是void類型。
這是我的函數的返回類型。
現在，我們有括號括住在這裡，因為我不知道。
下一步將是我的函數的名稱，
最後，我們有一個分號，就像我們在C.
什麼是新來的，是這傢伙在這裡。
這連字符實際上是必要的，這說的是，
這種方法必須調用類的一個實例。
>> 當我們宣布我們的結構，我們可能是這樣說：
結構節點n，和實際創建
或實例化這些結構，這樣我就可以真正開始工作
它裡面是什麼，所以這個破折號意味著我們必須
實例化的類，就像我們實例化結構
之前，我們可以調用這個方法就可以了。
如果我要開始我的方法添加參數
它變得更加香蕉。
這裡是我的方法的名稱。
然後我有一個冒號，這個冒號後，這裡說的幾個參數。
這種方法需要一個參數。
其參數的類型是int，這樣的說法和名稱
，我要開始使用裡面的方法或變量叫我。
再次，這是方法。它接受一個參數。
>> 如果你想開始添加更多的參數，得到更多的香蕉
中，我們有這個冒號在這裡說來我的參數列表。
第一個參數是一個整數。
現在，這個說法很有趣。
我的變量，將使用在我的功能
被稱為F，所以在我的功能，我可以說
F + = 1或東西。
這件事情在這裡基本上是一個關鍵，參數或參數。
就像我們的鍵值對的東西，如JSON或關聯數組
Objective-C的說，沒關係，只要它確實是明確的決定
當你調用一個方法，所有這些參數是什麼
實際上，我到他們的名字。
當你調用一個方法，你實際上會說andFloat的，
然後你會通過它。
>> 有趣的是，這個人是沒有被命名，但所有的其他參數，
因此，如果我們有一個第三個參數我可以說andFloat的
和另一個浮動等。
當我把這些方法當然香蕉，
所以，如果我有一個對象，我定義了一個名為foo的方法，
我想打電話給它，而不是說foo的打開/關閉括號
我要打開一個支架。
下面是我的方法的名稱。
我要關閉支架，這是我調用它的對象。
請記住，所有這些方法都存在於類
因為類可以有定義的方法內的。
>> 在這裡，我隨意創建某個類的一個對象，
這是這樣做的語法。
有2個步驟創建一個對象。
第一步是說，我要分配空間。
這相當於一個malloc。我們沒有說的malloc了。
我們放棄了米，它的alloc，取代的。c。米。
後，我們的alloc東西的，我們就需要對其進行初始化。
基本上，當你創建對象，你可能想有一些邏輯
執行時，他們創建的，所以你可以通過一些默認值
或類似的東西，所以這個init（）方法實際上是創建對象。
我們第一次分配空間，就像我們在C，
然後我們將它初始化，可能會或可能不會做很多。
然後，我們回到這件事情的對象o。
這裡有一個明星，因為從技術上講，這是一個指針，
不過不用擔心，指針是不是什麼大不了的事在Objective-C了。
>> 現在，我們已經實例化這個類NSObject的，
而這僅僅是一個隨機的類，蘋果。
我們已經實例化了，現在我有這個類的一個實例
在這個對象o，所以這意味著，如果我定義
這些方法，我可以打電話給他們這個樣子。
同樣，如果我想用一個參數來調用一個方法，
所以這是酒吧的方法，它有一個參數，
這裡是巴茲：QUX方法，所以這需要兩個參數。
這是調用這個對象o上的一個功能。
有意義嗎？
它的語法意義，但你種習慣。
>> 好吧，讓我們來談談幾件事情中內置的Objective-C的
不一定C建成。
在C語言中，我們種的，因為這些愚蠢的字符數組與字符串處理，
真的很討厭。
Objective-C的全部建成，對我們來說，它是建立在
使用這個類稱為NSString的。
當我想創建一個NSString我們有更艱澀難懂的語法。
而不是說：“CS50”我們說：“CS50”
而這僅僅是聲明字符串中的Objective-C的語法。
這是非常容易忘記，所以不要。
現在，一旦我有這個，這是一個字符串，但要注意
它實際上是一個對象。
我說的NSString，這意味著我實例化的類
所謂的NSString，別人寫的我，
和他們是很不錯的了，所以現在
我可以調用它的方法。
如果我調用該方法的對象s的長度
它會回到我這裡來的字符串的長度。
這是一樣的strlen C.
這將返回4。
>> 同樣，我可能要關心的是另一種方法這個characterAtIndex。
這是一個方法，說這個字符串s
我希望你能得到零級人物，
，所以這將返回到我的字符c，
有一大堆以上的這些方法，你可以在Google真的很容易。
蘋果的文檔是偉大的，我們就來看看，在一個位。
這些都是字符串。
我們也有內置的可變大小的數組
請記住，在C時，我們聲明數組
我們不得不說，你有5個元素，故事的結尾。
當我們到了JavaScript和PHP，我們可以開始
做的事情，如添加元素或移動元素。
我們可以做同樣的Objective-C中。
在正常的C方式，而不是創建一個數組
我們再次調用另一個類的NSMutableArray。
還有的NSArray，
這是怎麼回事，基本上封裝了一些陣列。
這是說我想要做的第一件事情是我想分配
為新陣列的空間，並在我分配
然後，我需要對其進行初始化。
同樣，調用這些方法。
現在，這意味著這個對象內部的一個
我有一個空數組坐在那裡。
如果我要添加到這個數組中的東西，我可以調用AddObject方法。
我想補充一個對象數組a，我想補充的字符串CS50。
如果我想反過來刪除，我可以說，我要
刪除對象在陣列上的第一個地方或物件。
>> 有意義嗎？
好了，你種習慣了這方括號內的事情。
順便說一下，裡面有很多蘋果的圖書館，你會看到這個NS。
NS實際上代表的下一個步驟，這是史蒂夫·喬布斯最早的公司之一，
而這也正是他真的開始寫了很多的代碼
作為一種適用於Mac OS X和所有其他的東西的基礎，
所以這NS是這個漂亮遺留下來的一種喊出來較早的公​​司之一
回來時，蘋果公司第一次開始了。
它無處不在。
讓我們來看看一個更全面的Objective-C的例子。
在這裡，我在裡面的Xcode。
到這裡，我第一次從App Store下載的XCode，
打開它，然後我去到文件，
在這裡，新的，然後項目。
當我這樣做，我有所有這些選項是什麼，我想創建，
所以我們就來看看這些選項後，
但在這個例子中，因為我們實際上沒有去有一個應用程序，
我來到這裡，和我說的命令行工具，
這是一個應用程序，我可以在命令行中運行
就像我們已經從C
這就是我創造了這個項目，所以現在我在這裡，
讓我們先來看看這個文件，這應該很熟悉。
我有一個int的名稱。還有我的朋友，我的其他哥們ARGV的argc。
因此，我們可以看到，這是我的第一個Objective-C的應用程序的入口點。
在這裡，我們可以忽略這個現在。
這基本上是一些內存管理的東西，你不會真的
以往任何時候都不必擔心。
>> 讓我們來看看這首塊。
這第一行，如果我說學生愛麗絲= [[學生的alloc]初始化]那是什麼做的？
這首先這裡的學生，這可能是一個類。
這是不是一個類，蘋果寫的，但它是一個類，我寫的。
我想要做的第一件事情是，我想新的學生分配空間，
然後我想將它初始化，所以這讓我回
這個新的學生對象，我存儲在一個叫愛麗絲的變量。
那類從何而來？
那麼，在這裡的左側，這些都是我的項目裡面的不同的文件。
我們可以看到，在這裡我有一個Student.h和Student.m。
h文件，記住，是我宣布所有的事情
將存在於類。
>> 讓我們來看看在那。
好了，在這裡，我們有這樣的@接口，這說來
一切都將存在於我的課的聲明。
然後，我有一個冒號。然後，我有這樣的NSObject的事情。
這的結腸表示，繼承位，我們的討論早一點。
這是說一NSObject可以做的一切
NSObject的是別人寫的這個類，
這的NSObject的可以做的一切，我想是能夠做到這一點。
他說：NSObject的，這意味著我基本上
繼承另一個類的所有的功能。
這真的給了我一大堆，我可以用不同的方法和屬性。
在這裡我創建2個屬性。
這意味著我的學生，如果這是一個結構，這將是兩件事情
我的結構內，使每一個學生都有一個名字
這是一個字符串，和學生也有一個檔次，
這是一個int。
>> 最後，在這裡我要為我的學生創建一個方法。
我打電話給我的方法，initWithName，它需要一個參數，
該參數是一個字符串，我把它叫做命名。
現在，讓我們來看看我們如何實現這個類。
在這裡，我現在是我的m文件裡面，
m的實施，我猜。
我有我的實現，我的目的，這裡是什麼地方，我實際上是在定義
什麼initWithName。
我有initWithName，我的參數的名稱，然後將此
實際上，我創建一個學生，
所以這是一個有點神秘的，但是這是種樣板
要包括在你的構造函數。
在這裡，這個初始化函數initWithName，是一個類型的構造函數。
你基本上是興建一座新的學生對象
也許它內部的數據發送一些。
我想要做的第一件事情是我要調用init這超級事情上。
>> 請記住，當我回到這裡。h文件
這一切的NSObject的學生也有。
這意味著，當我創建了一個學生，我還需要做的是
確保NSObject的，我繼承所有的數據
正確初始化。
我需要說的是，這個超級實際上是指父類
我繼承的，所以我想確保我初始化
一切，我根據之前，我開始嘗試使用它。
然後，如果正確初始化這就像說如果malloc
沒有返回null，然後我就可以開始設置一些屬性。
>> 在JavaScript和PHP，我們有這個關鍵字叫這個，
這是指一類的當前實例。
在Objective-C中，我們稱這種自我。
當我說self.name，這意味著該對象
我剛剛創建時，我說，學生的alloc初始化，
將會給我回一個對象。
這意味著我要設置該對象的名稱
無論我剛剛傳入
就像在C中，我們訪問這個點，
所以self.name說的學生對象的名稱
現在不管你剛剛傳入
所以最後，我可以返回它，所以我得到的東西回來。
>> 有問題嗎？
好了，所以這個自我=超初始化的，
如果你不完全理解繼承的東西，不要擔心。
只知道，如果你想使自己的init（）方法只是
做到這一點，你會好到哪裡去。
是啊。>> [學生]是什麼，如果自我平均？
這意味著，當我們的malloc的東西，我們總是檢查，如果它等於空，
如果它是空的，然後我們退出。
這是同樣的事情，因為如果此方法返回null，那麼我們很可能要賽格故障
如果我們開始試圖操縱它。
這是我們的學生類。
這意味著我們可以初始化我們的學生在以下兩種方法之一。
如果我說學生的alloc初始化，我沒有使用這種方法，我只寫了，
不是我可以簡單地說alice.name，
現在我要設置該屬性的名稱。
>> 同樣，如果我想使用，initWithName方法
我可以簡單地說ALLOC，然後，而不是說的init
我要調用該方法，我剛剛創建的，我要通過在鮑勃。
在這一點上，此對象鮑勃具有名稱等於給Bob。
好了，在這裡我使用NSMutableArray裡，我們前面介紹過。
我我分配space.Then的我一個新的數組初始化。
我要的東西給它加2。
現在，此數組保存學生對象。
請注意，沒有在哪個地方，我不得不說這是一個數組的學生。
我說，它是一個數組期。
然後，我可以把任何在它裡面，我想。
在這裡，我有兩個對象。
>> 最後，我有另一個對象，這個TF。
在TF.h在這裡基本上是同樣的事情。
我從NSObject繼承的方式，
創建類時，這一切都為你做，
這種接口的樣板。
它有一個屬性的學生。
我有一對夫婦的方法在這裡並不真正做了一大堆，
因此，這意味著創建這個TF對象後，
我可以調用此方法的檔次上是這樣的。
Objective-C語法上的任何問題，然後才開始遷入一些更
有趣的應用程序開發的東西嗎？
>> 好吧，讓我們的實際上是一個iPhone應用程序。
核心類，你會在你的iPhone應用程序使用被稱為視圖控制器，
一個視圖控制器基本上是一個單一的屏幕
你的應用程序裡面，所以如果我的音樂應用程序，例如，
一個視圖控制器可以代表我的視圖中查看所有歌曲在我的iPhone。
另一種觀點控制器可以當我點擊一首歌曲，開始播放
我深入到藝術家。
這些不同的畫面中的每一個都可以表示為一個不同的視圖控制器，
一個視圖控制器類實際上只是一個說，這個屏幕是如何工作的。
裡面的東西的一個視圖控制器，我們要的屬性，
這樣的事情像一個按鈕，將是我們的視圖控制器的屬性。
>> 我們也有方法，這些都是基本的事件處理程序。
這種方法說，當你按下這個按鈕時，
我想要做的事情，最後，再次，
我們將使用這種自我關鍵字來訪問當前實例。
要建立在iOS界面實際上是真的，真的很容易。
他們有這個漂亮的叫Interface Builder中的拖放界面，
和2線的核心概念，你的Objective-C的界面生成器
IBOutlet和IBAction。
一個IBOutlet簡單地說，如果你聲明一個屬性，這是一個按鈕，
你想要把它掛在您的實際UI的東西，
你會說，這是一個出口。
同樣，如果你​​想表示一個事件處理程序
那麼你會說​​這是一個行動。
>> 要真正連接的圖形表示
你的代碼是真的，真的很簡單。
如果你想附加一個IBOutlet，所有你所要做的是控制點擊，
我們會看到一個例子，這是真的快。
您可以控制​​點擊它說 - 視圖 - 控制器。
你要拖動到界面，或者相反，
如果你想連接的事件處理程序，你要拖動的界面
在另一個方向上。
讓我們來看看在一個非常簡單的iOS的例子。
>> 讓我們創建一個新的項目。
我要來這裡申請，
我要“的單一視圖應用程序。
我要點擊下一步。我會給你我的項目的名稱。
我會打電話給它餵。
有趣的是，蘋果公司不承擔您要創建一個產品
這樣就可以賣它，他們就可以賺錢。
在這裡我會說，這是一個iPhone應用程序。
您可以創建一個iPad應用程序，或者如果您想創建這些應用程序之一
支持這兩種設備可以做到這一點。
這是你想要看起來像你的复選標記。
>> 您要使用的故事板，我們將在後​​面看到，
你一定要使用自動的引用計數，
這是一個很好的功能，可以防止你說malloc和free。
除非你想調用malloc和free，我將離開這個托運。
我會單擊“下一步”，最後，這是怎麼回事，問我在哪裡，我想將它保存。
我會打造成“，在這裡，我們去。
我創建了一個新的項目。
在這裡的左邊是我的項目內的所有文件，
請注意，我得到了一大堆，我什至沒有做任何事情。
IOS是很大的。
>> 例如，在這裡ViewController.h，
這將是我的第一個視圖控制器，
所以我的應用程序的第一個屏幕內。
現在我們知道這是什麼話說。
我們說，我調用這個類的ViewController，
一個ViewController的一切，一個UIViewController，
而這，又是一些類，蘋果寫道，我們做了很多方便的東西
我想顯示在屏幕上。
在這裡我可以真正開始界定什麼是我的視圖控制器，
事實證明，我真的不需要任何。
這是蘋果給我免費的樣板代碼。
我確實需要，第一行，我沒有一類，
這樣我們就可以擺脫，擺脫這一點。
好了，所以這是我空白的屏幕。
>> 現在，讓我們的點擊這MainStoryboard.storyboard，
這是它開始變得有趣的地方。
這代表我的應用程序的第一個屏幕。
如果我想在HTML中添加一個按鈕，我不得不創建一個按鈕，標籤。
在Android中，你必須創建一個按鈕，標籤，
但在iOS中，如果我只是來這裡的右下角
，如果我點擊，第3個在這裡說的對象，
我可以向下滾動，或者我就可以開始搜索按鈕。
你看，一個按鈕，所以如果我拖動和下降這一權利，
我只是增加了一個按鈕，此畫面在我的應用程序。
如果我想改變的文字，我可以雙擊它，
說誘人，如“按我的東西。”
好了，現在如果我運行這個程序，所以我們編譯它，
運行，我點擊播放按鈕在左上角，有我的應用程序。
我沒有做任何事情，我有一個甜美的期待的iPhone應用程序。
如果我要阻止它，你可以單擊“停止”按鈕
因為它更有趣。
>> 比方說，我真正想要的東西發生時，我按下這個按鈕。
要做到這一點，我需要做的是，我需要創建
一個新的事件處理程序或行動。
這意味著，我需要創建一些方法，我希望被稱為
當我按下按鈕，讓我們創建一個新的方法。
我裡面的ViewController.h。
我需要說的方法存在。
我需要一個連字符，因為我將要調用此視圖控制器。
我需要給這個類型。
“這是怎麼回事，IBAction的事情，我們在前面看到的。
這是一個事件處理程序，所以它會返回一個IBAction，
這是一個暗示說，到XCode
這是我想要的東西線的東西。
我可以給它一個名字，如buttonPressed，分號。
>> 現在，我宣布我的班級內部的一種新方法。
我說的這個方法存在。
現在，讓我們的進入ViewController.m，
讓我們說，這種方法可以做什麼。
例如，如果我開始打字，（空）buttonPressed
通知XCode是非常好的，對我來說自動完成。
這真是太棒了。
請注意這裡面的m文件，我也可以說無效，
這是，因為這，IBAction是不實際的類型。
它實際上包括hashtag定義的是一個空白的地方，
再次，這只是一個提示Xcode中說：
我想這是一個事件處理程序中，我們將看到為什麼在短短的一秒鐘。
按下此按鈕時，我會做一些惱人的
我想顯示一個彈出窗口。
>> 要做到這一點，我可以創建一個新的類的實例稱為UIAlertView，
這是一類，蘋果寫道，要顯示煩人的彈出窗口。
我們稱這個彈出警報，我有2個步驟，記住，要創建此對象。
我需要做的第一件事情是分配空間。
我想的UIAlertView。
我想分配空間。這是我的第一種方法。
我的下一個方法是我想要初始化它，
所以我有這個又大又長的方法，稱為initWithTitle。
這基本上就是要控制這個彈出窗口說什麼。
我的彈出窗口的標題可以招呼。
這個彈出的消息是：“這是iOS的。”
代表的事，我不知道那是什麼。
比方說，沒什麼。
現在的按鈕，會出現可以說是“肯定的是，”
和我真的不希望任何其他的按鈕，讓我們刪除，並關閉支架。
>> 好吧，我創建了一個額外的一個。我們走吧。
這就是我如何可以創建一個新的彈出窗口。
如果我要顯示的彈出窗口，我想調用Show方法。
要做到這一點，我可以說警報，並顯示，
再次，自動完成超好聽。
如果我忘了那是什麼，如果我只輸入S，
我在這裡可以通過滾動弄清楚它是什麼，
過濾得很好。
現在我創造了這個新的彈出窗口。
我們會回來後，代表意味著什麼
現在，我想說，我想這個方法被解僱
當我按下按鈕，所以我要回來我的故事板，
我想現在重視這個IBAction。
你想要做的第一件事情就是按一下按鈕。
當我按下這個按鈕，我想事情發生。
我不會去，按住控制權。
我要單擊並拖動按鈕
在這裡，它說 - 視圖 - 控制器。
我們可以看到，它很好地亮起來。
>> 如果我讓我的鼠標，我現在有這個彈出，在這裡，我有一些選擇。
其中之一是我可以註冊的事件。
這些都是我宣布我的h文件IBActions這些方法。
這是Xcode如何知道什麼應該出現在這個小名單，
所以，這只是一個提示。
如果我按下按鈕上按一下，我現在已經註冊的事件處理程序。
在JavaScript中，我們不得不說，我有一些代碼，註冊事件處理程序。
在Objective-C，它真的那麼容易。
如果我運行一次
現在當我按下按鈕時，要解僱我的事件處理程序，
我要得到這個彈出。
超級，超級簡單。
>> 如果你想看到所有已經登記的事件
上一個組成部分，如果我點擊此按鈕
和我來這裡的右側
第一次在這裡你可以看到我喜歡的類型的按鈕可以做的事情，
所以如果你想那些我的“添加聯繫人”按鈕
或什麼的。
如果我想看到所有的事件，此按鈕
如果我遠道而來，在這裡的右側
在活動中，我有所有這些不同的事件，我們可以在這裡看到。
我可以按按鈕，當我放手的按鈕，當我雙擊自來水或任何，
我剛剛註冊的是這一事件被稱為觸摸裡面，
說，一旦我的手指離開按鈕
該事件要火了，這也正是剛剛發生了什麼。
這是一種默認的按鈕被按下的事件。
>> 有任何疑問，這麼遠嗎？
好吧，這就是我們可以開始連接起來的東西在我們的代碼中
進入裡面的東西，我們的接口。
請記住我們必須做的第一件事是找到的代碼，
然後我們有線接口的代碼，
那是我們的第一個應用程序。
好吧，這真是太酷了，我們創建此按鈕。
如果我們不希望有創建一堆的屬性
代表這些按鈕嗎？
例如，在井字我有9個按鍵，
它會是超級，超級討厭有拖放9倍
或者如果我不得不做出打井81，而不是9
，我不得不拖放81倍，這就是跛腳。
我們能做些什麼，而不是很像一個HTML
當我們有ID和名字一樣的東西，我們可以尋找的東西
通過他們的ID，有一個類似的概念在iOS稱為標籤。
>> 標記是一個唯一的數字標識符的組成部分。
例如，如果我說這有一個標記為0，
如果我創建一個按鈕，並給它一個標記為0，我們將看到如何做到這一點在短短的一秒鐘，
如果我想要得到這個按鈕，我可以簡單地說，我要打電話
viewWithTag對象上的方法，在這裡，
self.view，它代表了當前的屏幕，例如。
如果我打電話，viewWithTag的方法，我要拉回來的按鈕標記0。
讓我們一起來看看這款大廈井字。
首先，這是我的故事板。
我已經創建了這10個UI按鈕。
請注意，他們都是一樣的尺寸。
如果我點擊了其中的一個，我在這裡在此右側回來
你會看到我調整了字體在這裡，所以我做的字體有點大了，
但我也做了我設置這個標籤。
我說，這有一個標記為1，這是最佳的左側。
>> 現在，如果我點擊另一個按鈕，這樣第二個，
現在，你會看到我的標籤2。
每個按鈕都有一個唯一的標籤，
所以這是以後怎麼我要開始交互
我的應用程序。
這是所有裡面的一個視圖控制器，
但這裡是我們所擁有的。
我們這裡有3個屬性。
第一個和最後一個要代表我的板子的狀態。
基本上，這是一個數組，表示其中X和OS。
這等人告訴我們該輪到誰了。
你會發現，我也有這些東西在這裡。
在此之前，當我們聲明的屬性，我們給了他們一個名字和一個類型。
我們也可以給他們一些額外的信息。
這第一個說非原子，這是什麼
基本上只有一件事，永遠不會試圖訪問這個變量的時候。
你可以做更複雜的應用程序都是多線程的，
和做回，在Scratch我們有不同的線程，
不同的精靈可以做不同的事情在同一時間。
>> 如果是這樣的情況並非如此，它不是什麼，我們將著眼於，
如果說非原子，它實際上使事情有點快。
我們也有這樣的東西叫分配，強，或弱。
這種分配，只是說，這是一個標準的類型。
這是不是一個對象或者一個指針，因為這僅僅是一個布爾值，
因此，BOOL是內置的Objective-C的。
這是說，不要試圖做任何事情看中這裡的指針。
這是一個普通的老定標器。
強與弱，弱的說，其實
我想這是被人指指點點的東西在視圖控制器。
我不打算實際分配，或init這個我。
Interface Builder的，當我運行的應用程序，要處理所有的初始化。
如果我說弱者，另外一個人說將要創建此。
如果我說強，說，我要一個
創建此板對象，
所以在這裡，我在這裡有更多的方法，
例如，新的遊戲的按鈕被按下時，一個動作，
當任何其他的按鈕被按下時，一個動作，
等等。
>> 我們不會得到到井字太多的邏輯，
雖然這是非常令人興奮的，但是讓我們一起來看看
一些我們可以做的事情，裡面的iOS。
這種新的遊戲方法是將被解僱
每當我按新的遊戲按鍵。
要掛鉤，我只是過來我的故事板。
我點擊了新的遊戲。
如果我來這裡的右側，我可以看到，
觸摸起來裡面是有線到的newGame的方法。
這就是為什麼這會被解僱。
newGame方法做一些設置。
這是怎麼回事，說我要你清除板的狀態。
這是一個很好的方法，可變數組。
這是怎麼說的，現在輪到X的，
現在，我將充分利用本viewWithTag的事情。
>> 我知道，我的按鈕的標籤1-9，
這是我隨意挑的東西。
如果我要設置每個按鈕的文本是空的
因為我剛剛開始一個新的遊戲，我不希望任何
XS或操作系統被遺留下來的，我可以做到這一點。
我可以說我想要的標籤，1，2，3，4等等。
這將每次拉不同的按鈕。
在這裡，我打算將它轉換為UIButton的。
就像我們投int到彩車，反之亦然
這說，我想投一個UIButton。
這意味著此類型的將是一個UIButton *
因為三分球，但不用擔心，他們不再害怕。
>> 一旦我有這個按鈕，我要調用一個方法就可以了。
這種方法被稱為setTitle forState，所以這說
我想設置的按鈕的文本是空字符串，
我希望它是空字符串時，它不是按。
如果我用這個方法，我可以改變文字的按鈕
只要有人點擊它，但我們想說的按鈕時，只是坐在那裡，
我想是空白的文本。
最後，我們要初始化我的板，
我要去說，目前一切都在0，
所以這個董事會的成員不變的是一個可變的數組，
這意味著我可以調用AddObject方法，只是它裡面的0。
這是發生了什麼，當我創建一個新的遊戲。
>> 讓我們來看看另一個。
這種方法在這裡是要被按壓的IBAction
每次這些廣場之一被按下。
現在我們這裡有一些井字邏輯。
我們計算出該輪到誰了，
此基礎上，我們要么設置一個X或O，
但我們注意到，我們打算重用相同的事件處理程序
每一個單一的其中一個按鈕。
這意味著，我沒有的方法的最佳的左按鈕，
不同的方法右下角的按鈕，但我可以做到這一點。
這不會真的是不錯的設計。
實際上，我要確定我在這裡做什麼
被按下的按鈕的標記是什麼。
您會注意到，這種打法方法接受一個參數。
這就是所謂的發件人和發送者的發送者要
究竟代表什麼時採取行動。
如果我按下一個按鈕，發送者將是該UIButton的
我按下，這樣就意味著，UIButton的
有一個標記，因為我創建了一個標籤。
>> 如果我想要得到的標籤，我可以簡單地說
我想在標籤的發送者，
，我剛剛鑄造一個UIButton。
我碰巧知道發送者將是一個UIButton。
它並不總是必須是一個UIButton。
例如，我可以，我註冊了相同的事件處理程序
為一個用於一個按鈕，一個用於一個滑塊。
在這種情況下，我知道他們所有的按鈕，所以我說
我想這是一個按鈕，然後我就可以得到標籤，
從標籤我現在知道我在裡面的電路板。
然後，我可以簡單地設置X或O，可翻轉轉，
檢查誰贏了，等等。
>> 至今有任何疑問？
好了，所有的代碼，我們在網上發布，我們不希望進入太多
的的井字邏輯，但現在你可以看到，真正
我們正在做的是，我們遍歷這個數組，
因此，我們有一對夫婦的for循環在這裡，我們只是比較看
我們有一個匹配的所有行，比賽在一列或類似的東西。
要真正運行這個程序，如果我點擊其中一個按鈕
玩的方法被解僱了，所以這意味著我只設置
是X的按鈕，所以現在這個按鈕將是一個O，等等，
所以這是我們如何開始這個單頁面應用程序進行交互。
>> 我們將發布的代碼，可以隨意細讀，
但現在，讓我們來談論一些應用程序，更多的不僅僅是一個頁面。
井字令人興奮的是，大量的應用程序裡面的iOS
這些鑽孔是一種具有多個屏幕下來的東西。
第一個概念，我們需要談論的協議，
協議就是一組方法
你能答應來定義。
如果我創建這個新的協議有2種方法，第一個，
如果返回類型為void，我把它叫做foo的。
它不帶任何參數。我有另一種方法。
它返回一個int。我打電話給它吧，它需要一個參數。
所有這一切協議，這就是所謂的SomeProtocol在這裡，
這是一組的人可以實現的事情。
我還沒有在本協議說什麼foo的。
相反，我只是說如果你想，你可以foo定義。
如果我創建一個視圖控制器或創建一個類
我可以在這個類的承諾，以實現
其中的一些方法，所以舉例來說，如果說
現在說我在做一個對您的承諾，這裡面
這個視圖控制器類的，我會為foo和bar的定義。
>> 這是為什麼有用嗎？
很多內部組件的iOS利用
設計模式叫做代表團，代表團說什麼
是，舉例來說，如果我有一個文本框
有我的文本框內部的一些事件，可以註冊，
而不是創建單獨的事件，我能做些什麼，我可以說
這個文本框的委託，將某些對象。
當我說，這是一個代表現在這意味著，
當有一些事件將會被解僱，在文本框中
而不必註冊或類似的東西
它只是要調用的方法的委託。
例如，在裡面我有一個方法，當我按我的文本框
完成後，在右下角的按鈕，
等，而不是註冊的事件處理程序，我可以說是
文本框，這裡是一個對象，我希望你調用一個方法
每次有人按下“完成”按鈕，
這意味著，對象必須實現某些協議
說我答應做的按鈕操作定義，
因為如果不定義該方法，你按了，
那麼它會是混亂。
>> 讓我們來看看一個例子。
在這裡，我只是有一個文本框，
在這裡在此右側的這個文本框的屬性之一是委託。
這是一個屬性的類。
我在這裡做的是我控制點擊，在這裡，我拖著這點
到視圖控制器，並且說，現在這個文本框的委託，
將是視圖控制器。
這意味著，當發生某些行動，而不是登記
我要你把它們發送到委託獨立的事件處理程序。
現在，讓我們來看看在我的視圖控制器。
裡面的。h文件中，我已經作出了承諾。
我已經答應來實現本協議內的一些方法
被稱為UITextFieldDelegate，並再次，
這僅僅是一些列表的一些事情，我可以選擇執行。
>> 如果我來到這裡，在我的m文件，我已經實現了這樣的一個方法。
我把它稱為textFieldShouldReturn
因為這是這是什麼所謂的協議內。
現在每當我按下完成按鈕，該文本字段內
這是發生了什麼事情被調用，所以我沒有註冊事件處理程序。
我的委託，每次發生此事件被觸發
這是將被調用的方法，所以，如果我來這裡我的故事板，並運行它
而加載，我們可以看到，這是什麼做的。
在我的屏幕上，我有兩件事情。
我有這樣的文字欄位，我有這樣的標籤。
我只是說，我想這個標籤的文本
等於不管用戶鍵入的文本字段內。
下面這一行，這裡是一個簡單的方法，我給你打電話
在文本字段說，我希望你能隱藏鍵盤。
這僅僅是蘋果選擇的任意方法。
>> 同樣，在我做了什麼，我不得不將所有東西了，所以我第一次來到這裡。
我的視圖控制器拖動到文本框中。
我放手，我可以看到，在這裡，我可以使這個文本字段屬性
因為在這裡的視圖控制器中，我定義了一個屬性
這是一個IBOutlet的文本字段。
這是說，我可以連接屬性
我的用戶界面中的文本字段。
現在，當我點擊這個，我可以開始輸入。
現在，如果我點擊“完成”按鈕，這是怎麼回事火
我現在可以響應的事件。
事件處理程序。
這就是我剛做的按鈕。
有意義嗎？
>> 這是一種設計模式，你可能會不會發現自己
創建自己的協議，但我們知道，有些
不同的iOS組件註冊事件以不同的方式。
按鈕，例如，使用這些IBActions。
文本字段，另一方面，要使用的代表。
我們可以看到，你可以看看，裡面的所有的文件。
順便說一下，其實有一噸重的為你的iOS內置的UI東西，
例如，在我說在右下角
我選擇這個文本字段。
我這邊走了過來。
我向下滾動了一下，返回鍵，
我實際上可以使這一大堆的東西一樣，如果我想，說
緊急呼叫，而不是我能做到這一點，這是完全隨機的，
我不知道為什麼有一個內置的緊急呼叫按鈕，
但也有，它說，在非常小的字母緊急呼叫。
你去那裡。
>> 絕對探討所有在iOS這些不同的選擇。
代表任何疑問嗎？
同樣，只是一個有趣的設計模式，你應該知道的。
好吧，讓我們的下一代來看看在表視圖。
表視圖是基本的項目清單，是所有的地方在iOS。
當你翻閱您的所有聯繫人，你看
設置頁面的事情的清單，而這種被稱為表視圖。
在iOS上實現表視圖是非常簡單的。
而不是下降，UIViewController的一類
就像我們以前做之前，我們只需要簡單地說，而不是
一個UIViewController沒有我想要做的一切，
我說一個UITableViewController沒有我想要做的一切，
所以，簡單地添加一些額外的東西，是完全為我們做了。
我們需要做的很少，基本上填補空白的表內。
>> 為了顯示一個表，我需要回答一些問題。
我要回答的第一個問題是表中有多少段？
當你翻閱您的聯繫人應用程序，你會發現它的種
組織的作為，那麼你的家，你有那麼一點子標題。
每個這些被稱為一節。
您可能會或可能不需要這些。
你需要做的第一件事是實現的方法
所謂的tableView：numberOfSectionsInTableView。
這只是簡單地返回你有多少段，
因此，可以說，如果你有一個很大的表視圖，返回一個。
接下來的問題是，內部監督辦公室需要知道的是你有多少行？
例如，你正在翻閱一表視圖。
你有一個固定數量的歌曲，你看或固定數量的接觸。
如果你是我，當然，沒有那麼多，
所以這是如何的iOS知道有多少細胞顯示。
>> 同樣，這可以說是這樣回報3。
我的表視圖中有3行。
最後，IOS需要知道每一個細胞看起來像什麼，
所以它實際上是做什麼的，是這裡調用此方法，
的tableView：cellForRowAtIndexPath。
這將調用此方法，你的表上的每一個細胞內。
它是如何知道多少次調用它呢？
好了，你告訴它裡面節中的行數。
我們會打電話給我們的細胞，
在這裡面，在這裡你可以真正喜歡做的事情
設置文本，或者告訴你是什麼藍色的小按鈕，在右側。
的模式，讓這些細胞，我們要使用此方法
被稱為dequeueReusableCellWithIdentifier。
>> Objective-C的實際上是非常有名的荒謬的長度它們的方法名稱，
這確實是一個不錯的點的例子。
這種方法確實是這樣的，只是說我要你給我一個細胞。
只是iOS的事情。
如果你有像10萬首歌曲，在你的iPod
IOS不想要做的是分配100,000個細胞，
因為如果你在列表頂端時，你是否真的需要分配內存
下來是99000行的單元格？
沒有，因為當你滾動，你可以種分配，當您去。
這樣做是為了你。
您不必擔心所有的愚蠢表現的東西。
你說的是你調用這種方法dequeueReusableCellWithIdentifier，
這說，沒關係，如果你需要，我會為你創建一個新的細胞。
>> 但是，如果你在表的底部，你已經分配了一些細胞
在表的頂部，你真的不會需要很快
我給你一個，而不是分配一個新的，
所以這是一個不錯的性能問題。
您不必分配自己的細胞。
這將會給你回一個細胞。
這將返回給你一個單元格對象。
一旦你有你可以做的東西給它的單元格對象。
此屬性的文本標籤，您可以設置文本的單元格。
您可以添加在右邊的箭頭或其他一些隨機的東西
這個叫其他財產的accessoryType，等等等等。
>> 讓我們來看看現在實際執行的表視圖。
當我創造了這個項目
而不是說單一視圖的應用程序其實，我這邊走了過來
主詳細的應用程序，基本上是這樣的郵件應用程序
在iPad上的表格視圖左側，然後在右邊的內容。
在iPod或iPhone上，這是對應於一個單一的表視圖。
這就是我得到了我的啟動代碼。
>> 讓我們先來看看在情節串連圖板。
所有這一切都為我所做的，基本上創建的。
此導航欄給我看一個例子細胞可能看起來像，
，我可以雙擊，更改標題。
任何其他UI問題，我可以處理。
頭文件看起來真的很簡單。
與其說這是UIViewController的，我們現在說這是一個
TableViewController，所以我們知道我們想要調用的所有表的方法。
接下來，我想創建一個屬性的代表
我的表裡面的東西。
此表將任意顯示
水果的列表，所以我需要創建一些數組
我可以將水果。
我的執行文件的第一件事情裡面，我想要做的
我想確保我初始化數組。
>> 我說的alloc初始化，創建我的果實陣列，
，我加入到它的4件事，其中之一是更有爭議比其他3。
而現在，我有一個數組大小為4。
我們不停地搖晃，CS50。
我現在有一個數組的大小為4。
現在，我要開始回答這些問題，而實際上，
當我創造了這個應用程序時，所有這一切都已經為我做的。
我沒有在表視圖中輸入的節數。
這是已經存在，而且我填補的空白。
我有多少段？
一。全部完成。
我有多少行？
嗯，我有一個行的每一個水果，所以這個數
說有多大的數組的屬性是什麼？
這是我有多少行。
最後，我需要說的每一個細胞看起來像什麼？
我要說dequeueReusableCellWithIdentifier。
>> 同樣，這已經為我寫的。
我沒有這樣做我自己，我要回去
這種細胞在這個位置。
請記住，我們可以將這個同樣的方法對每一個細胞，
這種說法在這裡，這indexPath參數，
說行我
如果我說indexPath.row在這裡
這將是0，那麼這將是1，那麼它會是2，這是，所以我知道
我目前顯示什麼樣細胞。
我想設置文本的單元格使用此為textLabel屬性
裡面去我的果實陣列，並得到
對應於每行的對象。
如果這是一個字符串，我現在設置
text屬性設置為一個字符串。
我可以做的一件事。
我也註冊了一個事件處理程序的每個細胞，
所以，當我點擊每個單元格
這didSelectRowAtIndexPath，這是怎麼回事打電話給我，
通過簡單的定義，我現在可以處理發生了什麼
當你點擊一個單元格，再一次，我們通過細胞被竊聽
所以，我們可以重複使用相同的事件處理程序為我們所有的細胞。
>> 再次，這是IOS是為我做的東西。
讓我們顯示另一個惱人的彈出
簡單地說，你挑的東西在那裡的東西
將是該行的對象。
當我運行這個，我要這個漂亮的表視圖
一排這些水果，如果我點擊
它告訴我發生了什麼事。
有意義嗎？
讓我們建立一個稍微複雜一點的應用程序，
盡可能多的點擊你選擇了番茄。
很好的情節串連圖板
是它的不只是單獨來幫助我們設計屏幕，
它也將幫助我們聯繫在一起，我們的整個應用程序，
所以最終的應用程序，我們將建立新聞閱讀器這是很好的運動，
等將有多個屏幕，這樣我就可以實際上代表
這些多個屏幕的故事情節，
我可以放大和我的應用程序從一個高的水平。
>> 為了創建一個新的元素裡面我的故事板
其實很簡單，裡面的界面生成器。
如果我想添加另一個屏幕，例如，
我可以先縮小與蘋果喜歡這麼多的雙指縮放，
在這裡之前，我搜索一個按鈕
我和拖放一個按鈕
如果我要創建一個新的畫面，我可以實際上只是拖動和下降
整個視圖控制器，所以如果我挑了這個，把它在這裡，
嘿，還有另一個屏幕，所以現在使用同樣的故事板文件
我可以有我的應用程序內的所有的畫面，我可以縮小
看看它們如何相互作用。
這些還沒有互動。
這2個屏幕互動的方式，就是你定義的關係。
基本上你可以說這屏幕，當您按下此按鈕時，
我希望你能滑動到這個新的屏幕。
這意味著有這種關係
第一屏和第二屏。
你會基本上是一個箭頭，從該按鈕的第二個屏幕
他說，當你按下這個按鈕時，這就是我想要去的地方。
就像我們控制點擊和拖動來定義這些網點
我們要到做同樣的事情，定義這些segues的。
>> 我們將看到一個例子，在我們實際過渡
從一個屏幕到另一個iOS是不夠好，調用此方法
被稱為prepareForSegue，這是我們可以開始
將數據從一個應用程序到另一個。
在這個例子中，我們將要看看它基本上允許我們
過濾棒球隊的聯賽和部門。
例如，當我選擇一個聯賽，我想過渡
我的下一個屏幕，在那裡我可以顯示所有的部門
該聯盟或所有不同的團隊。
我需要發送的隊伍，你應該顯示該屏幕。
要做到這一點，我要採取這種方法的好處在這裡。
>> 最後，只是一個隨機點在iOS上。
如果你要存儲的數據是這東西叫做核心數據，
這實際上是一種複雜的工作。
您也可以使用SQL來存儲數據，
再次，是好的，但一種更複雜的一面工作，
但iOS也支持這些屬性列表非常酷的事情，
和財產清單僅僅是一個文件，該文件表示鍵值對。
您定義的鍵的列表，和你說，這個鍵是一個數組。
此鍵是一個字符串，基本上什麼可以做，
在JSON中，你可以做裡面的一個屬性列表，
，所以這真的很好，讓我們能有一些數據。
例如，我有這Teams.plist，我創建了。
我創建了一個新的plist文件，我可以向下鑽取。
這是一個字典，這是一個字典，這些都是字符串，
所以這是一個很好的圖形表示的JSON文件
或只是一組鍵值對，
所以這是，我會與我的應用程序內的數據。
>> 讓我們先來這裡。我們現在有更多的文件。
不過，讓我們先來這裡的腳本。
其實，故事情節在這裡，如果我能縮小
現在我們可以看到，這是我的應用程序的流量。
我首先要在此屏幕上開始。
我要向下鑽取到這個屏幕，
，我會深入到這個屏幕，我們可以在這裡看到的，如果我種
移動這些後，我們可以從這裡到這裡的箭頭，
我定義箭頭的方式，如果我在一點點放大，
如果我過來到這個視圖控制器，
這裡是一個細胞，我想說的是，當你點擊一個細胞
我希望你能滑動到另一個屏幕。
我可以簡單地按住控制，
多一點點滾動，按住控制，拖動該單元格，並放手。
>> 在這裡，我們說什麼的過渡要使用的呢？
你想使用該幻燈片的事情，這就是所謂的推嗎？
你想從下往上滑動嗎？
這就是所謂的模式。
當我點擊其中之一，它會為我作出這樣的箭頭，
這意味著，其實我已經會發生什麼，當我按下這個按鈕，圖形化的處理。
我沒有寫任何代碼就可以從一個屏幕上滑動到下一個。
我定義的界面生成器，這在視覺上內。
如果我點擊這個箭頭，我們可以看到，我給了這東西的名稱。
我把它叫做的showDivisions，這是使我可以知道
發生的轉變是什麼，我們就會明白為什麼在短短幾秒鐘之內。
這就是我在我的應用程序的不同屏幕有線。
如果這是一個按鈕，例如，而不是表視圖，
我可以控制的按鈕上單擊，拖動到下一個屏幕，
這就是我可以做導航的方式。
>> 真的很快，如果我們到MasterViewController來，
再次，我們只是要定義的東西的清單
將顯示在表視圖。
在這裡，我說我要你把那個plist文件，
我希望你能加載它到一個字典，
一旦你有字典，我會再回答這些同樣的問題。
這裡的節數。
其中，有一排為每一個聯盟，每個單元格中的文本
應該是第一個，第一個聯賽，聯賽第二，等等。
最後，我要使用這種方法，我們只是看到了被稱為prepareForSegue，
這是方法，將被解僱，當我點擊
在那些行之一，因此激活該過渡
我設立的箭頭。
這是說，我可以有多個
從一個到另一個屏幕的關係。
如果我有2個按鈕，每個按鈕帶你到不同的畫面
我要為每個按鈕有2 segues，1。
但此prepareForSegue是，再次，要被重用
對於每個不同的關係，因此，這意味著，我需要一種方法
確定，如果按下第一個按鈕或按下第二個按鈕。
>> 還記得當我給Segue公司的名稱，這showDivisions，
這就是我現在知道，這是SEGUE被激活。
我想要做的就是我想說的
我想弄清楚什麼我只是打，
等拿到，我可以說，我要為選定的行的indexPath，
記得indexPath只是說，我只是點擊，
然後我想說，我想弄清楚我要去的地方。
這的destinationViewController，這是一個財產的SEGUE。
這就是我要的畫面，
所以我知道我要的屏幕被稱為DivisionsViewController
因為我創造了這個類，
所以現在如果我說d.divisions
我現在設置的視圖控制器的屬性，我去。
這是我發送的數據從一個屏幕到另一個屏幕。
>> 只要看看這DivisionsViewController的
你可以在這裡看到。h文件
還有就是物業部門，這就是我基本上填充，
所以這就是我知道我顯示對應的部門
我點擊的同盟，並再次，
實際的表視圖看起來幾乎是一樣的，只是回答這些
3個簡單的問題，以及確定
會發生什麼，當你移動到下一個屏幕。
只是一對夫婦，其他的東西在這裡。
您會發現在頂部，而不是在這裡說的＃include
我現在說的＃import。
這僅僅是一個Objective-C的東西。
的進口基本上是一個更好的版本包括，
例如，我們需要知道這個類是什麼，
這樣我就可以不只是說DivisionsViewController的。
如果我們不包括h​​ashtag standardio.c內。c文件
編譯器不知道printf的是什麼。
同樣，如果我不導入DivisionsViewController
編譯器真的不知道什麼DivisionsViewController的。
只要確保這裡面不同的m文件，確保導入的
對應的。h文件，使編譯器知道這是怎麼回事。
>> 最後，什麼蘋果最終沒有被使用Web視圖顯示一些數據，
一個web視圖對象，在其中您可以嵌入
您的應用程序內部的一個小的web瀏覽器。
所有你需要做的是提供一個URL到您的網頁瀏覽器，
所以我想去mlb.mlb.com，
這是怎麼了，我可以訪問的主頁每個團隊，
通過此URL
的web視圖可以顯示這對我來說，我可以瀏覽周圍，
模擬器是在使用中的一個。
現在，這是從我的plist。
如果我點擊這個來自我的plist，滑動處理
定義這些segues。
我點擊一多，
現在這裡是我的UIWebView的，所以就像
這裡的網站，我只是嵌入式的URL，
我沒有處理什麼瘋狂的。
這是如何顯示的Web頁面。
之類的東西這回按鈕，在這裡也給我
完全免費的，因為我已​​經定義了這些關係segues。
>> 有什麼問題嗎？是啊。
[學生]因此，當你使用alloc，你永遠不會有免費的什麼？
沒錯，當你調用alloc和init，你沒有釋放它。
IOS會為你處理所有這一切。
這是美妙的，而你沒有違反任何規則。是啊。
[學生]：如果你有更多的球隊，可以在屏幕上顯示，
它會自動有一個滾動的選項，或者是，你需要添加的東西嗎？
沒錯，如果我有更多的球隊，例如，它會自動處理
對我來說，所有的性能問題的滾動
巨大的表也完全為我處理。
>> 其他問題嗎？
所有這些代碼將被發布。
我們種更微小的細節，掩蓋了一點點，
但諸如此類的web視圖設置一些屬性
只是事情，你可以通過瀏覽蘋果的文檔，
這是真的，真的很好的佈局。
他們有很多的示例應用程序和示例用法
不同的API，所以肯定細讀如果可以的話。
只是一些有用的鏈接，你可能想看一看。
這些都是一些有用的文檔指南。
網址是巨大的，所以他們縮短。
第一個是整個庫文件。
很少有搜索欄，所以如果你開始輸入按鈕
它會開始給你所有的信息，所有的事情，你可以用一個按鈕。
我還包含了表視圖編程指南“。
它可以處理更詳細的表視圖，
做這樣的事情如何動態地添加單元格或編輯單元格或刪除。
>> 有大量的示例應用程序從蘋果公司會告訴你如何做到這一點，
終於，這最後一個是人機界面指南，
這是基本的UI組件的一些討論，
這樣的話不使一個按鈕，4個像素，4個像素。
這是一個壞主意，和其他的東西，蘋果想要你做的事
鼓勵良好的設計。
>> 最後還有什麼問題之前，我們完成了嗎？
好了，肯定會覺得 - 我們有特殊的標籤上討論。
我們將有一個iOS之一，所以肯定會覺得自由利用這一點。
如果你想與你的同學對項目工作
或幫助找出一些隨機的iOS的東西
隨時給我發電子郵件，絕對仔細閱讀所有網上的代碼，因為
的利益的時候，我們只是在掩飾了一種更
細粒度細節的東西。
但是，如果沒有，那麼在您的iOS項目，好運氣，我希望我們能有
在App Store中的應用程序的大量湧入。
[CS50.TV]