RHED SHI: Добро пожаловать см. CS50 семинар - Введение в МО. Спасибо всем, что пришли. Надеюсь, ты так же рады как я собираюсь прошивкой. В прошлом году, я взял CS50 как студент-второкурсник, и я в основном узнал IOS для моего Окончательный проект. И это было довольно - ну, это было не просто, но есть много поддержки учебники онлайн. И я очень надеюсь, что с этим Семинар, я дам вам, ребята голове начать на развитие IOS Так, с точки зрения развития IOS, Есть две основные вещи, мы хотите, чтобы покрыть сегодня. Во-первых, язык - язык будет в Objective-C. Мы на самом деле услышать что-то действительно захватывающее. Таким образом, вы можете присоединиться к целое яблоко сообщество разработчиков и построить некоторые действительно удивительный приложений. Кроме того, IOS 7 красиво, мы надеемся, для некоторых из вас. Но это спорно, я знаю. И в основном, то, что я хочу сделать, это руководство Вы через Objective-C, а также Xcode, которая является интегрированной среда разработки, что вы будете работает в течение прошивкой. И так, просто слово на Objective-C. В основном, это то же самое как C, но с большим количеством других вещей. Так вот, более строго, это на самом деле супер-набор C. Поэтому все, что вы можно сделать в C прямо сейчас, что в основном нравится PSET 0 до 6, вы может сделать в Objective-C. Так что, не бояться об этом новом язык, который вы собираетесь учиться. Вы уже рассмотрели много его, потому что вы все сделали C это прошлое семестр, за исключением теперь вы собираетесь иметь намного больше работать. И я просто хочу провести вас через Несколько примеров, чтобы выделить некоторые из ключевых отличий, которые я нашел, были очень важно, когда я узнал, Objective-C в прошлом году. Ну на самом деле, так, с другой точки есть, Objective-C, очевидно, объектно-ориентированный. И мы обсудим немного о том, что это означает, что позже. В принципе, это все равно, как вы работали с Структуры в этом прошлом PSet, с узлы и аналогичные другие такие вещи, как, что. Кроме этого, в Objective-C, все объект, и вы собираетесь быть проходящей вокруг указатели на объекты а не сами значения. Так, это просто что-то важное иметь в виду. Итак, почему бы нам не начать с несколькими различия в синтаксисе между С и Objective-C? Я хочу, чтобы выделить # включить, вы знаю, стандартный io.h в С и С + +, с Objective-C версия, что, что является # импорт, а затем своего рода Файл заголовка. В этом случае, было бы UIKit, Вы знаете, слэш UIKit.h. Это также может быть, вы знаете, MKMapview Вам сократить MKMapview.h, если вы хотите чтобы сделать, как, карту внутри вашего приложения. Подобные вещи, как, что. Таким образом, главное, включают Теперь ситуация изменилась импортировать. Но идея все еще остается. Вы собираетесь импортировать какую-то из файла заголовка в вашей программе. Я также хочу, чтобы выделить разницу между Printf и NSLog. Однако, как мы уже говорили ранее, Objective-C является строгим супер-набор С, что означает, что Е существует в Objective-C, тоже. Но, большинство людей не использовать это. Большинство людей используют эту NSLog, потому что это дает отметку времени, и мы увидим, это в действии позже. Но, обычно, более полезным способ распечатать переменные. И я также хочу подчеркнуть, что NSLog занимает в точно такой же значения заполнителей как Е делает - так% г является для INT, % Е для поплавка. Тем не менее, я хочу, чтобы выделить это самый последний - NSLog% на знак - что является прототипом для объекта. И, как я уже говорил ранее, Objective-C сделок в значительной степени в основном в объекты, и так это придет в использовании, когда вы хотите распечатать, пожалуй, может быть, NSArray или NSDictionary, или NSString. Так, также, отметить, что, на наш NSLog заявление, у нас есть на знак перед цитаты - то есть, чтобы показать, что строки, в настоящее время, в Objective-C являются объектами. Они больше не являются просто символьные звезды. Они объектов и рассматриваться как таковые. Таким образом, это очень важно, что, когда Вы используете NSLog она занимает в NS строка, что означает, что вы будете иметь включить, по меньшей перед вашим кавычки. И именно поэтому вы видите, здесь, во всех моя функция вызывает к этому NSLog, я есть, по меньшей перед кавычек, даже хотя% г и% е являются все равно из С. Любые вопросы до сих пор? Я постараюсь, чтобы пройти через это быстро, так что мы можем иметь больше времени для работы с Xcode и Objective-C, так что что вы, ребята могут получить более знакомы с ней. Далее, я хочу, чтобы выделить что-то концептуально важно. Так, в С, большинство вещей функции. Мы делаем вызов функции. Мы заявляем функций этот путь, с возвращение введите, а затем Имя функции, скобки, а затем каковы бы ни были аргументы и тип эти аргументы, которые мы хотим передать дюйма И Objective-C, потому что все является объект или класс - так как класс и объект два термина, которые в основном синонимами друг с другом, так что я может использовать их как взаимозаменяемые в течение семинара. Но, вы увидите, что у нас есть методы в Функции Objective-C, а не. И методы принадлежат к объектам. Так же, как, может быть, принять Например, узел - наш тип [неразборчиво] узел из PSet 6 или 5 - у нас есть слово, имущества, или следующий указатель узла. Методы же просто функции внутри из своего рода структуры. Таким образом, в этом случае структура будет объект, а затем метод то, что принадлежит к объекту. И это, как вы бы объявить, рода, метод. Вы бы начать с, опять же, возвращение тип - это так, я попытался цвета кодировать ключевые слова здесь, так что вы, ребята, можно увидеть, по крайней мере, форматирование Сходство между функцией декларации и объявления методов. Таким образом, вы начинаете с, вы знаете, возвращение тип - в данном случае это массив или NSArray указатель - а затем вы должны этот метод. И потом, что интересно здесь что вместо того, скобки, мы есть эти двоеточия. А потом, перед нашими аргументами, мы говоря, опять же, в скобках тип нашего аргумента. Так, сейчас я пытаюсь сделать сравнение, вы знаете, п и число, потому что они оба, как целые. А потом, другой это тип NSUInteger. А потом, с Objective-C, когда вам хотите иметь несколько аргументов в ваша статья метод, вы, вроде, разделить их вроде как это - Я не совсем уверен, как описать его, но это хороший пример того, как вы может иметь несколько аргументов в там. Можно, конечно, просто полностью игнорировать двоеточие andArray NSArray Массив, если вы хотели просто метод , который принимает в один аргумент. Да, вопрос. АУДИТОРИЯ: Являются ли оба NSUInteger и NSArray аргументы, которые могут быть приняты в в NSArray? RHED SHI: Да. Итак, позвольте мне объяснить. Так что, да. Таким образом, вопрос был в NSUInteger и NSArray * типы аргументов, и это правильно. Таким образом, вы всегда хотите указать, что тип вашей аргументации. И здесь, я пытаюсь представить вас к некоторым из синтаксиса и Vocab из Objective-C, так что те фактические типы что вы будете иметь дело с. И как вы заметите, массивы больше не, вроде, простые кронштейн вещи. Они объектов. Хотя, если мы идем к следующему слайд, мы видим, что мы можем жестко закодировать NSArray в Objective-C с просто символ в перед скобки. Я не, на самом деле, совсем уверен ли Я синтаксически жестко массив правильно для версии C, но это должен быть в массиве C. Таким образом, это, как бы вы, вы знаете, возможно, использовать функции или методы, которые мы создали ранее. Не так ли? Таким образом, это то, где мы заявляем о своей Функция и наш метод. А теперь мы хотим использовать их в наша программа, и это как мы будем это делать. Так, в C, вам придется, вы знаете, пожалуй, BOOL б, и вы установите его в равняться функцию, а затем Вы передаете в аргументах. В Objective-C, это довольно почти то же самое. У вас есть NSArray * my_array, и это собирается равняться - сейчас, только Отличие здесь в том, что этот объект, который я выделены желтым цветом, и как вы можете видеть, в С, есть никакой другой желтый слово. И это потому, что методы принадлежат с определенным объектом. Так вот почему мне нужно иметь объект что, вроде, вызывает этот метод на число ноль, а затем NSArray а, б, в, г. Есть вопросы по этому поводу? Мы увидим, эти понятия в действии довольно скоро, когда мы идем в демо. ОК. Теперь, я хочу поговорить немного кратко о Xcode 5, который интегрированная среда разработки что вы будете работать с. Я знаю, многие из вас, или некоторые из вас, не имеют Mac, что является проблемой потому Xcode не доступна для ОС Windows и ПК. Не спрашивайте меня, почему, но, вероятно, - да, корпоративные. Какая разница. Но в любом случае, так что, я прошу прощения, если некоторые из вы должны скачать какую-то виртуальная машина для Mac в Для того чтобы запустить Xcode 5. Но это довольно изящный программное обеспечение для использования. Так вот, прежде чем мы углубимся в какой-либо демо, я просто хочу показать вам, в картина того, что Xcode выглядит в вашем окна, а затем также говорить о что вся это пространство. Таким образом, это вроде как научиться использовать Microsoft Word, за исключением вы хотите ознакомиться со всеми разные вещи, которые собираются здесь. Итак, сначала я хочу указать вам на панель инструментов в верхней части. Вы увидите, что, на самом верху, вы будете иметь имя файла - или, на самом деле, имя вашего проекта а затем имя вашего файла. Принять к сведению пьесы и запорные кнопки. Это те, что вы будете используя для запуска приложения на Симулятор - симулятор IOS. Это автоматически поставляется с Xcode 5, так что вам не придется беспокоиться о загрузив какую-то симуляторе. Вы просто нажмите кнопку воспроизведения и затем он работает ваше приложение. И вы можете поиграть с вами, и вы увидите, как это работает позже. А потом, в центре, конечно, где все ваши красивой код собираюсь идти. А потом, на левой стороне, вы будете есть это, своего рода, папка - навигация - а затем, вы также увидите, что наряду со значком папки означает, что куча других икон там, что будет полезным в дальнейшем. А потом, на правой стороне это утилита область, где вы можете работать с некоторые объекты и укажите, вам знаю, что цвет должен быть, то, что шрифт текста должно быть, и так далее. Хотя, все, что вы делаете в области коммунального хозяйства, вы можете сделать в коде, а также. И так, я буду идти через две примеры не используя, просто, нет кода в все - или очень минимально необходимый код - стихи всего кода, просто так, что вы, ребята, знаю, что вы можете и не можете сделать в Xcode и Objective-C. И вот, наконец, на дне, у вас есть отладки область. Таким образом, вы больше не придется отлаживать, и так далее, в ваших программах. Она автоматически сделает это за вас. И вы можете также распечатать материал к этой области. Таким образом, фактически, позже, мы пройдем mario.c, если вы, ребята до сих пор помню , что в Xcode. Так что должно быть весело. А потом, чтобы вернуть его к Objective-C, я хочу выделить то, что вы можете сделать с если заявления. Итак, вы знаете, потому что Objective-C является расширенный набор C, все, что вы сделать, это, буквально, так же, как С. Вы просто имеют незначительные различия. Так, вы заметите, форму для если заявление является все тот же - у вас есть если, и тогда вы должны скобки с состояние внутри, он, а затем фигурные скобки для все, что вы хочу сделать внутри там. Тем не менее, я хотел поставить этот слайд вверх здесь, просто чтобы проиллюстрировать, что, потому что мы имеем дело с объектами сейчас, мы должны будем использовать эти вещи называется так, равна строке, которая является, по совпадению, метод строка или объект NSString. Так, слово, в данном случае, является NSString объект, и это имеет метод является равна строки, а затем мы передаем в жестко запрограммированной строки, чтобы увидеть ли те равны друг к другу. Любые вопросы до сих пор? ОК. И я хочу, чтобы перейти для постановки также. Так, например, если мы хотим, чтобы петли по длине строки в C, это должны быть вам знакомы. И, в Objective-C, я хочу чтобы подчеркнуть это, своего рода, Метод называется граф. Ну, на самом деле, пусть мне просто взять свои слова обратно. Количество это метод массива. Однако, это более конкретно свойство массива, поэтому вы можно использовать точечную нотацию. Но я не хочу, чтобы попасть в слишком много эта концептуальная материал, я просто хочу, чтобы показать вам, как все будет выглядеть как в Objective-C по сравнению с C. А также, я хочу отметить, что хотя я использую NSUInteger на глазах у всех моих я х годов в Objective-C, Вы можете также использовать Int, потому внутр является полностью действует в Objective-C, также. Да? АУДИТОРИЯ: Это только стилистических, или - RHED SHI: Да. Так что, как вы увидите - Итак, вопрос был в том, что просто вопрос стиля. Как вы увидите, у меня есть, вроде, звезду Звездочка вещь вниз, на дно, и что ссылка ведет к переполнению стека образуют, где кто-то объясняет разница между междунар в NSInteger и NSUInteger. И так, вы можете прочитать об этом позже. Эти слайды будет, конечно, доступны для вас. Давайте посмотрим. ОК, удивительным. Таким образом, это также включено в слайд потому что я думал, что это был отличный сайт, который знакомит вас синтаксису Objective-C. Так, собственно, почему бы нам не перейти к Хром и проверить этот сайт? Верно. Итак, что я хочу показать вам, ребята здесь это изображение. Так, это, своего рода, будет то, что Вы будете видеть внутри любого Xcode файл. Собственно, почему бы нам просто не взять момент, чтобы, как бы, возьми дюйма Так, эта книга - вот объект, мы имеем дело с. И потом, это, очевидно, будет унаследовал от другого объекта, но Вы не должны беспокоиться об этом. И потом, это, пожалуй, имеет некоторые переменные-члены. Важно то я хочу показать вам, это методы экземпляра, здесь. Так, методы экземпляра обозначаются этим знаком минус. А потом, как вы заметите, что мы уже начинаем видеть парадигму для объявления метода, не так ли? Возвращаемый тип, имя метода, и то тип аргумента, и то имя аргумента. И это знак минус означает, что это Метод экземпляра, что означает, что эти методы доступны только для объекты, которые были экземпляры. Противопоставлять, что, методы с плюсом подписать перед ними являются класс методы, что означает, что вы можете позвонить эти методы, даже если у вас нет Объект, созданный еще. Таким образом, для наглядного примера, NSString является классом. И вы можете позвонить, например, Методы класса по NSString - фактический, вроде бы, слово NSString. Тем не менее, для того, чтобы использовать их методы, вы на самом деле нужно создать строку. Например, NSString звезда строка равна в кавычки, привет мир. И потом, вы можете использовать эти методы - методы экземпляра - на этом привет мир строки. Так, что разница между методы экземпляра и методы класса. И, мы просто покрыты эту часть. Свойства являются Другое дело, что есть внутри объектов, в основном. И вы объявляете их с на ключевое слово собственности. Возможны следующие варианты, вот, что я объясню позже, когда мы идем в демо. Да? Привет. АУДИТОРИЯ: Не могли бы вы увеличить, пожалуйста? RHED SHI: О да. Извините. Зала: Спасибо. RHED SHI: Это должно быть намного лучше. АУДИТОРИЯ: Да. Спасибо. RHED SHI: Да, пожалуйста, напомните мне, если Я забываю, чтобы увеличить или уменьшить масштаб. Так вот, это все, что я хотел чтобы показать вам, для - эй, это много - для этого веб-сайта. Итак, давайте вернемся к нашим слайдов. На самом деле, теперь давайте воспользоваться моментом погрузиться в демо. Так, мы начнем с новый Xcode проект. Так что, если вы будете открывать Xcode на всех ваши машины, он должен принять вам некоторые страницы, где он говорит, вроде бы, либо открыть до существующий проект или новый Проект, и вы должны нажмите новый проект. И потом, он должен принять Вы к этому экрану. Да? АУДИТОРИЯ: Если мы не имеем Mac, мы только отчасти охладить? RHED SHI: Или посмотрите на с кем-то, да. Да. Вы можете расслабиться, тоже. ОК. Итак, что мы собираемся делать в первую очередь, в настоящее время, является, на самом деле, мы собираемся сделать Одно приложение вид. Так что, если вы заметите, что это здорово о Xcode и поддержки Apple, для разработчики в том, что у вас есть много шаблоны для работы с уже. Можно, например, сделать мастер-деталь приложение. Вы можете сделать игру - а на самом деле, я не буду вдаваться в играх, потому игры это совсем другая история для развития IOS. И они своего рода отделить, так что я не буду вдаваться в это. Тогда, вы, основанную на страницах приложений. У вас есть приложение вкладку - так нравится, например, Банк Америки вероятно, имеет, как, с вкладками приложение. Это те, где у вас есть кнопки в нижней части. И потом, у вас есть Комплект игру Sprite. Или вы можете работать с нуля, что это то, что мы сделаем позже. Но давайте, во-первых, начать с одно приложение вид. Тогда, это будет попросить название продукта, и мы можем просто сделать тест. Название организации - так, название организации, Идентификатор компании - тех, важны, если вы собираетесь разместить приложение на App Store. Кроме этого, ваш код будет запустить абсолютно нормально без этого. Это будет важно, если вам хотите - так, по сути, как, положить ваше приложение на ваш телефон или что-то, и тест это, вы знаете, в реальной жизни - это будет важно. Это приводит к обычно ассоциируется с своего рода аккаунта разработчика с Apple. Так вот, я знаю, наверное, многие из вас не будет иметь никаких счетов для разработчиков. Я знаю, что университет имеет один. Я думаю, что CS имеет один. Но, вы можете написать мне, и я постараюсь , чтобы понять это для вас. Но сейчас, я просто положить в некоторые заполнители вещи здесь. И вы можете, конечно, здесь, выберите хотите ли вы, чтобы это было исключительно в iPhone, в IPad, или оба - универсальное применение. Так, на данный момент, давайте сделаем универсальными, просто чтобы увидеть обе стороны платформы. Давайте посмотрим. Так, прямо сейчас, я иду, чтобы спасти это в какой-то папке. Не важно, где - вам всегда можно переместить его позже. И, сейчас, мы принесли к нашей Xcode проекта. Я бы не беспокоиться обо всем этом. Я хотел бы предложить не касаясь любой из не это, если вы точно знаете, что вы делаете. Так, все это, просто игнорировать по большей части. Вам не нужно будет трогать, и если вы вы портите некоторые вещи здесь, это становится немного сложнее. Так, почему бы нам не изучить файлы на левая сторона в нашем навигаторе. Здесь, у нас есть AppDelegate.h. У нас есть AppDelegate.m Так что, как вы будете уведомление, мы заголовочные файлы, которые конец точка ч, и у нас есть реализация - на самом деле, позвольте мне увеличения масштаба ОК. Позвольте мне увеличения масштаба Право, так вы заголовочные файлы и у вас есть файлы реализации. На самом деле - ОК. Это немного странно, но терпеть меня. Тогда, потому что мы выбрали один вид Приложение, мы собираемся быть работе с раскадровки. Так, раскадровка является то, что Apple, придумал, чтобы действительно помочь разработчики быстро создавать прототипы их приложения. Таким образом, это где вы можете создать приложение, не написав одна строка кода. Однако, на наш одном приложении зрения, мы, конечно, есть подать на наш взгляд, что является контроллером вид. Итак, мы имеем заголовок и Файл реализации, здесь. И, я собираюсь, чтобы уменьшить масштаб сейчас, потому что мы должны работать в раскадровке. Итак, вот наш взгляд. Если мы, просто, запустить приложение прямо сейчас, существует не так много интересной происходит. Таким образом, вы увидите это белый экран. ОК? И, в нашей области коммунального, мы можем добавить куча разных вещей к нему. Так что, когда вы имеете дело с экранов в МО, вид контроллеры объекты, которые инкапсулируют, рода, ваши мнения. Так, контроллер вид всегда имеет свойство вид. И эта точка зрения, как правило, содержит, Вы знаете, что вы хотят видеть на экране. Так, хорошо, давайте просто начать, поставив, пожалуй, может быть, этикетка. Итак, давайте поставить метку на там - придерживаться его в середине. Так, теперь, когда я нажал на этикетке, я может перейти в инспекторе свойств и начать изменять его значение. Давайте назовем это CS50 Цвета. И, я могу также изменить шрифт. Таким образом, вместо того, чтобы делать систему, которая является по умолчанию, мы можем сделать пользовательский один. Мы можем изменить - Вы знаете, ультралайт, сделать его 32. И потом, мы можем сделать наш ящик больше. АУДИТОРИЯ: Как вы думаете, можно увеличить в чуть более, может быть? RHED SHI: Да? ОК. АУДИТОРИЯ: Просто нажмите на него? RHED SHI: Давайте посмотрим. Это работает? АУДИТОРИЯ: Просто передать Xcode? RHED SHI: Конечно. ОК. Потрясающе. АУДИТОРИЯ: На этикетке под? На этикетке? RHED SHI: Что это? АУДИТОРИЯ: Что выпадающий был лейбл под? RHED SHI: Итак, вопрос был, что раскрывающийся был лейбл под? Следует, просто, быть под здесь. Я предполагаю, что это куб вещь. Но, как правило, это значение по умолчанию - Я просто собираюсь здесь пока я не найти лейбл. Да. Так что теперь, у нас есть этикетку. Давайте его в центр. И Xcode дает нам руководящие принципы для центрирования объектов. Итак, теперь давайте запустим наш код еще раз. Там мы идем. Итак, мы имеем CS50 Цвета. А теперь, давайте поставить кнопку там, не так ли? Потому что мы хотим, чтобы сделать это интерактивное. Итак, давайте поставить кнопку здесь. И мы будем называть эту кнопку "кран здесь продолжить ". Мы в центре его, также На самом деле, это уже по центру. Да. Итак, теперь у нас есть кнопка. И если мы запустим это снова, мы собираемся чтобы иметь хорошую маленькую кнопку здесь. И я могу нажать ее, но она не делает ничего, потому что мы еще не сделали ничего с помощью кнопки пока. Так, давайте создадим еще один вид, не так ли? Так, скажем, я хочу нажмите что кнопка, и я хочу перейдите на другую страницу - другое мнение. То, что я собираюсь сделать, это, я могу создать контроллер вид, не так ли? Теперь я буду нажмите на моей кнопки, а затем, главное, что я собираюсь нажмите - или - да, нажмите управления на клавиатуре. Контроль. Нажмите на кнопку, а затем перетащите. Итак, помните удерживать клавишу управления. Давайте сделаем это снова. Так, провести контроль, нажмите и перетащите к тому, что вы хотите сделать. ОК. А теперь, у меня есть несколько вариантов здесь. Я могу либо толкать, или я могу сделать модальный, или я могу сделать обычай. Нажмите только если у вас есть навигация контроллер. Прямо сейчас, наш самый первый вид Контроллер не находится внутри любого навигация контроллер. Так, контроллер навигации является одним что дает обратную кнопку на приложение IOS, где у вас есть, вы знаете, что сверху, вроде, толстый прут - где вы можете вернуться, или вперед, и так далее. Прямо сейчас, я не имею, что. И так, вот почему я не могу сделать толчок. Так, я нажал на толчке случайно, здесь. А на самом деле, давайте запустим код, и он должен потерпеть крах на меня. Только если я нажимаю кнопку хотя, так - Право. Таким образом, это плохо. И, как вы можете видеть, здесь, мы есть сообщение об ошибке. Так, "Push непосредственно переходит можно использовать только тогда, когда Контроллер источник управляется экземпляр пользовательского интерфейса навигации контроллера ". Таким образом, потому что это не было внутри навигационный контроллер, Я не мог сделать этого. Так, прямо сейчас, я возвращаюсь к Папка, возвращаясь к раскадровке. АУДИТОРИЯ: Что навигации контроллер, снова? RHED SHI: Итак, сейчас я вам покажу. Давайте посмотрим. Так, я собираюсь нажать на этой точке зрения контроллер, а потом я пойду до продукта - на самом деле, нет, извините - редактор. И я собираюсь пойти в - на самом деле, я нажмите на нее? Нет. Там мы идем. Я собираюсь подняться в редакторе, спуститься встраивать в, а затем навигации контроллер. ОК. И, мой рабочее пространство выглядит действительно грязный, так что давайте очистить это. Таким образом, все это раскадровка. И таким образом - ОК, остановить - Я могу быстро построить что-то как это. И потом, теперь я могу вернуться, вы знаете? Но это скучно, не так ли? Итак, что я хочу сделать, это, я не хочу сделать, просто, вид контроллер. Скажем, я хотел на самом деле сделать представление таблицы контроллер, так что я могу поставить в некоторые хорошие цвета, в таблицу. Так, теперь, когда я положил на мой взгляд таблицы Контроллер, мне нужно подключить его обратно от этой кнопки, чтобы вид контроллера. Поэтому мне нужно, чтобы сделать мою контроль, Кликните, перетащить вещь снова. И теперь я могу сделать толчок, потому что я вставлять это внутри контроллера навигации. АУДИТОРИЯ: Навигация контроллер просто позволяет перейти с места на место? RHED SHI: Да. Так, более технически, это объект, где - Таким образом, внутри навигации объект контроллера, это отслеживает массива. И, что массив содержит все последующие смотреть контроллеров. Вот почему, когда вы нажимаете назад, восходит к предыдущей странице. Поскольку контроллер навигации объект или код, который заботится о этот объект, имеет массив, который держит отслеживать этих контроллеров отображения и может, вы знаете, DQ мнение контроллер и вернуть вам предыдущий. Таким образом, это технические вещи, но - и я покажу вам позже в Код, если у нас есть время. Я вроде уходит на время, но - Так, с точки зрения таблицы, что мы можем сделать, это - Это, как правило автоматически устанавливается в динамический Prototype - мы собираемся сделать это статичные клетки, в противном случае мы собираемся столкнуться с некоторыми проблемами. А потом, скажем, я собираюсь иметь один раздел. Так, разделы, как - если вы еще не видели музыкальный приложение, когда у вас есть художники, разделы бы быть через Z's - буквы - и потом, вы знаете, человек Строки были бы имена исполнителей. И так, что это круто здесь, в том, что я могу доступ ко всем объектам внутри моей раскадровки через это В раскрывающемся меню тоже. Так, я собираюсь нажать на моей секции, и я хочу, вы знаете, может быть, пять строк. А потом, внутри каждой строки, Я хочу поставить метку. И я буду называть эту Blue. И потом, я хочу поставить точку зрения пользовательского интерфейса, вы знаю, может быть, для, как, коробочку. Так что я могу показать людям, предварительный цвета. И я вернусь к собственности и изменить этот цвет, чтобы, ну, я не Знаете, это одно. А потом, обратите внимание также, здесь, когда у меня есть аксессуары, у меня может быть много из различных аксессуаров что вы обычно видите. Индикатор раскрытие, деталь, или галочка, или просто деталь. Так, может быть, мы можем сделать, как, раскрытие индикатор, например. И потом, почему бы нам не взять эти, копию вставьте их, и положить их в следующая строка таблицы. Таким образом, мы можем назвать это желтый. И я, возможно, придется расширить это. Давайте сделаем это желтый. И таким образом, мы можем скопировать вставьте наш путь вниз. Что это было? Фиолетовый. Итак, это все типичный CS50 Цвета, которые вы видели в классе - на самом деле, жаль - или на веб-сайте. Надеюсь, вы, ребята, можете посмотреть то, что я здесь делаю. ОК. Последнее один. АУДИТОРИЯ: Как вы добавить строка изначально? RHED SHI: Итак, вопрос был, как я добавить строку изначально? Я пошел в этот раздел таблицы - или однако я могу выберите раздел таблицы - а затем, вот, я обновил количество строк. И, позвольте мне надеяться, что это работает. ОК. Давайте посмотрим, если это работает. О, прекрасно, удивительным. ОК. В то время как я строил мой демо, некоторые вещи не были расположены, так что, спасибо за аплодисменты. Да. Так, давайте посмотрим. Мы сделаем это девять раз, чтобы сделать все - или на самом деле, давайте просто превратить все это в раскрытии показатели. И потом, что я хочу показать вам, тоже было то, как я могу взять каждый из тех, строки таблицы и имеют они взаимодействуют - о. Нет. О. Кроме того, я хочу показать вам - здесь, я могу поставить название моего навигационный контроллер, не так ли? Так на самом деле, вы заметите, как только я встроенный этот взгляд контроллер внутри контроллера навигации, мы видим, это навигационная панель в верхней части нашего Раскадровка представление контроллера представления. Так вот, это дает нам, как, визуальный, рода, путеводитель по нашей видимого экрана. Это, очевидно, будет быть навигационная панель. И то, что я хочу сделать быстро, Теперь, ставится в другой - так что это представление таблицы контроллер я сделал по принимая один из них и перетащив его здесь, и это то, что позволил мне быстро, на самом деле, создать представление таблицы контроллер. Если у нас есть время, хотя, вы будете видеть, что, программно, это немного сложнее создать таблицу вид контроллера, потому что несколько методов, которые являются для этого вам необходимо, своего рода, написать в порядке для представления таблицы контроллер, который будет отображаться правильно. Тем не менее, я просто хочу показать вам, сейчас, пример того, где, если я возьму это, например - Я положил в другой контроллер представления. А теперь, допустим, я хочу, чтобы управлять альт мой самый первый синий строка таблицы, чтобы здесь. И я хочу, чтобы вызвать эту Blue. А потом - давайте посмотрим. Я на вид, и я могу изменить фон на синий. И так, заметьте, здесь, это выпадающий Меню также дает иерархию все из этих объектов. Так Важно отметить, здесь, является то, что все эти вещи, вот - эта точка зрения таблице контроллер, таблица вид, вид таблица раздел, в виде таблицы клетка - все это объекты, в коде. Итак, вы знаете, этикетка сейчас находится под представление содержимого, и так далее. Так далее и тому подобное. Так что, если мы запустим этот код, мы должны увидеть что-то - давайте посмотрим, если это - да. Так, там мы идем. Но, если мы не делаем этого, ни один из эти другие вещи работать. Не так ли? Таким образом, только на этот раз работает. И, ради времени, я не буду идти в, вы знаете, положив вниз других. И это конец, рода, раскадровка - то, что я хотел показать Вы для раскадровки. И, у меня есть удался пример, на самом деле, прямо здесь. Таким образом, это раскадровка что я сделал ранее. Так что, как видите, это было мой навигации контроллер. Тогда я впервые контроллер представления, Затем у меня был свой табличного представления контроллер, а потом мне пришлось все это - так ранее, я делал что-то совсем другое. Так, извините эти вещи. Я, вероятно, очистить его позже до Я посылаю его к производству. Но, если мы запустим это, мы увидим что все варианты являются в нашем распоряжении. Только я не делал фоны эти цвета. Так, хороший простое приложение. Теперь, давайте попробуем решить это программно. ОК. Таким образом, чтобы сделать это, мы только собираемся чтобы начать новый проект Xcode. Мы будем делать это пустая приложение теперь, потому что мы не хотим иметь Раскадровка. Так вот, я просто ограничивая себя не использовать любой из раскадровки, а пустой приложение не будет дайте мне раскадровки. Это просто, чтобы предотвратить я от обмана. Давайте посмотрим. Подождите. Разве я - Да. ОК. Верно. Итак, вот, мы остались с не что иное, код. Итак, позвольте мне переместить это окно чуть более. Верно. Как вы можете видеть здесь, только файлы нам дают являются AppDelegate.h и точка м, и у нас нет раскадровку больше. Так что, если мы запустим это, мы по-прежнему будем добраться до белого экрана, слава Богу. ОК - белый экран, но ничего больше. И, вот важная часть. Это где действие происходит. В предыдущих версиях, есть не обычно нет кода здесь, но Раскадровка по сути обеспечивает код для этой части. Я не буду вдаваться в подробности о том, как. И то, что мы хотим сейчас сделать, это, мы хотим идти сюда, и этот мало места начинает создавать наше приложение еще раз. Так что - да? АУДИТОРИЯ: Zoom? RHED SHI: Zoom. Да, конечно. ОК. Я буду печатать, так что это не должно Независимо от того слишком много. ОК. Так, во-первых, помните, что мы хотели создать навигационный контроллер, не так ли? А также, как вы можете видеть здесь, Xcode делает действительно большую работу по само-заполнение. Так что, как вы заметите, имена все много дольше, чем обычно, но Xcode заполняет его для вас. Так что я могу просто нажмите Enter. Итак, я хочу, чтобы создать навигацию UI Указатель контроллер, и я могу назвать это NavigationController. Теперь, что же мне теперь делать? После этого знака равенства, мне нужно, во-первых, создать его в памяти. Итак, я собираюсь сделать NavigationController Alloc - так, это похоже на таНос, что вы, ребята, используемые в C - а затем, я собираюсь инициализации его. Таким образом, это действительно важно, чтобы любая Объект, вы создаете, вы хотите Alloc и инициализации его. Это собирается создать и instantialize его в памяти, и Теперь вы можете использовать его. Все в порядке? Если вы не сделаете это, ваш объект делает не существует, и вы будете работать в связке проблем. И потом, я хочу создать контроллер вид, не так ли? Итак, я хочу, чтобы создать UIViewController звезда - так, все это указатель в Objective-C, и я собираюсь сделать нечто подобное, здесь - Alloc, инициализации. ОК. А потом, что я собираюсь сделать, это, я собирается - так, помню, когда мы сделали код для вставки в навигационный контроллер? Это, как вы сделать это в коде. Вы собираетесь сделать NavigationController pushViewController - АУДИТОРИЯ: [неразборчиво]. Случится ли это для нас, или -? RHED SHI: О, да. Нет. Оно любит меня лучше. Нет, она будет работать для вас тоже. Итак, это все методы. Так pushViewController это метод, и Кроме того, более конкретно, это Метод экземпляра пользовательского интерфейса навигация контроллер. Потому что я должен был создать свой навигацию UI Контроллер звезда, и затем я Можно назвать это pushViewController на моем Конкретный экземпляр навигации пользовательского интерфейса контроллер. АУДИТОРИЯ: Есть ли у нас сделать точный слово, или это уже существуют для этого? RHED SHI: Да, потому что это способ. Это как функции. Это как Printf. Это как зсапЕ. Это как strcompare. Кроме него знает, что вы, возможно, захотите введите, и обратите внимание, что это будет всегда придумать вещи, которые являются официально разрешено для вас. Так что, если ничего не отображается здесь, значит что-то не так. Так, pushViewController. Итак, теперь, я хочу, чтобы подтолкнуть мой недавно созданный UIViewController, а затем, анимированные - возможно, нет. Потому что это будет первый контроллер вид. Я имею в виду, даже если я сделать анимированный, он, вероятно, не будет отображаться, потому это первый экран. И помните скобки. Итак, помните, как мы использовали скобки? И в скобках, Объект призывает метода - так что наш объект является навигация контроллер, и метод толчок вид контроллера анимированные. И посмотреть, как он берет в двух аргументов, и они разделены, своего рода, слова и двоеточие. Так, Objective-C пытается сделать его красивым и легко для вас, чтобы прочитать вслух - код - и есть его полу, рода, имеет смысла. Тем не менее, делают именно это недостаточно. Позвольте мне уменьшить сейчас. Делая только этого не достаточно, чтобы получить то, что мы добрались до ранее. Так вот, вы заметите, что есть на самом деле не собирается быть любой вид бар, здесь, не так ли? Там нет панели навигации, а это значит, что мы до сих пор не получили его. И мы можем проверить, что из, также, по, возможно, изменение фона ViewController, не так ли? ViewController.background-- ах. Так, посмотреть, как ViewController не было цвет фона, хотя я хотел получить к нему доступ? И это потому, что ViewController является контейнером для вида. Так, он имеет вид собственности, который то есть цвет фона. И, я могу установить его, вроде нудно, , вызвав цвет на объекте UIColor. Так, уведомление здесь, redColor это метод. Это метод класс UIColor. Потому что у меня не было, чтобы создать фактический экземпляр UIColor с тем вызвать метод на нем. Я просто, просто, назвал его от типа-как имя. Я, вроде бы, называется его на междунар, если внутр было, как, способ к нему, например. Так вот, если мы запустим этот код, мы будем заметить, что фон на самом деле не красный. Он по-прежнему белый. И как мы можем обойти это, обратите внимание, как там self.window. То есть, как, в конечном итоге контейнер для вашего приложения. Это конечная вещь, которая содержит все на экране, для iPhone или приложение IPad. И, удобно, self.window обладает этим свойством называется RootViewController. И это будет указатель на самый первый контроллер вид внутри вашего приложения. Итак, что мы хотим сделать здесь, сейчас, установить, что равно нашей навигации контроллер. Не так ли? Потому что, технически, навигация Контроллер наш самый первый вид контроллер. Он отслеживает целый ряд других целях контроллеры, и мы выдвинули этот вид контроллера в этом массиве в контроллере навигации. Таким образом, вы не хотите, чтобы это сделать. Это не было бы реально помочь вам. Вы хотите сделать это, если вы хотели сделать навигационный контроллер, который наиболее из вас, вероятно, будет, потому что вы хотите, чтобы, вроде, есть своего рода, как, меню, чтобы вернуться или некоторые Домашняя страница, чтобы вернуться к, а не пустой экран. Да? АУДИТОРИЯ: Это неудобно для вас, чтобы увеличить на - RHED SHI: Да. Так что, да. Это код, и теперь давайте проверить его. Так, там мы идем. Магия. Так, хорошо. Спасибо. ОК. Так что теперь, что мы хотим сделать, это - так, мы вроде ограничен, здесь, не так ли? Мы могли бы потенциально написать все Внутри этой одной функции. Но, это не так, как развитие IOS как правило, работает. Итак, что мы собираемся сделать, это, мы собирается создать несколько новых файлов. Но, в частности, мы собираемся создать новый класс Objective-C, или Другой задачей - класс и объекты являются взаимозаменяемыми здесь. И, вот, как я мог, потенциально, создать другой класс контроллеров U. Таким образом, это подкласс, как вы заметите, здесь, это подкласс Вид пользовательского интерфейса контроллера, но я могу называют это любое другое имя здесь. Я мог бы назвать эту CS50, я мог бы назвать эта точка зрения контроллер, я мог бы назвать это бла вид контроллера - все, что я хочу. Это просто название для класса. Тем не менее, это будет иметь важное значение потому что, по сути, что я делаю вот, я создаю другое название класса. Таким образом, это будет, как некоторые рода типа или объекта. Так, он должен быть немного родовым. Это не собирается быть очень конкретным. А также, я хочу указать из этих двух вариантов. Потому что мы делаем все внутри Код, иногда это намного проще довести в файле интерфейса, такие, что Я могу буквально перетаскивать, как мы сделали ранее с раскадровки - Вы знаете, этикетка, или кнопку, или то, что. И так, xibs файлы, которые позволяют это сделать, и вы должны подключить его на данный файл контроллера представления. Так, я собираюсь преднамеренно не проверить это. Обычно я хотел бы проверить это, и если я только сделали это на мобильный или IPad, я хотел бы проверить это и просто иметь один для, вы знаете, iPhone или IPad. Но так как я делаю универсальный, я собираюсь создать два из них позже. Так, я собираюсь преднамеренно снимите этот. Это также очень важно. Много раз, у меня было ошибок где это не было проверено. И так, очевидно, этот файл не, рода, как, включены или импортировать внутри этого теста папке. И так, мой код не имеет абсолютно никакого представления о существовании этого файла, и , который вызывает много боли и часы отладки. Но, просто убедитесь, что это проверяется так что, вы знаете, цель этого Файл для этого приложения. ОК. Итак, теперь мы создали два новых файла. И эти файлы выглядят довольно пусто. И, на самом деле, давайте также продолжать на, создавая XIb файлы. Так, ранее, я был в Cocoa Touch раскрывающийся. Теперь, я собираюсь идти в Пользователем Сенсорный интерфейс, и, как вы видите, я можно создать раскадровку. Таким образом, даже я начал с пустой Приложение, я все еще можете использовать Раскадровка. Хотя, это становится сложнее с точки зрения о том, как вы хотите подключиться что в код. Так, я не пойду туда. Но то, что мы хотим сделать, сейчас создать представление. И вы можете выбрать для iPhone или IPad. И, как правило, для обозначения Разница - если вы делаете универсальное применение - вы либо положить подчеркивания IPhone, или вы можете сделать Twiddly. Это действительно не имеет значения. Это просто для Вас, чтобы дифференцировать который вид, для которого устройство. И так, теперь посмотрим. У меня есть экран, который я могу работать. И так, к примеру, я могу поставить метку здесь, вы знаете, и я также можете поместить другая кнопка здесь. Я не буду беспокоиться изменения значения здесь. Но, что важно здесь что владелец файла - так, я внутри мобильный вид, iPhone шиб файл. И в настоящей района плавания или В раскрывающемся меню, я хочу поехать в Владелец файла. И это действительно Важным шагом здесь. Я хочу, чтобы мнение класса контроллер, так что этот файл шиб является собирается быть связаны с На мой взгляд контроллер. И все, что я делаю внутри моей точки зрения Контроллер программно является будет отражено на здесь. Так, однако, заметить, что - на самом деле, давайте сделаем это мнение синий фон, например. Или зеленый. А потом, так что если вы заметите, еще в этот код, это где мы добрались до нашего навигация контроллер. Несмотря на то, что мы сделали этот шаг, это по-прежнему будет красный, не зеленый. И на это есть причина, почему. Это потому, что, когда мы inited Мы считаем, контроллер, здесь - извините, это немного сумасшедший - когда мы inited наш взгляд контроллер здесь, мы inited его из общего типа UIViewController. ОК? Таким образом, мы даже не делали это с этим классом. Так что помните, это как класса сейчас. Это можно рассматривать как вид, так же как UIViewController это тип. И для того, чтобы использовать это, то, что мы должны сделать, это импортировать его - импорт ViewController - и, как вы можете видеть, это AutoFills это для меня. Так, ViewController - и теперь, здесь, я могу изменить это UIViewController к ViewController. А теперь, вот, я могу изменить это ViewController. Давайте запустим это снова. Он по-прежнему красный. И причина, почему это еще красный, потому что - воах, что там произошло? Мы хотели связать этот XIB файл с контроллера представления. Тем не менее, для того, чтобы на самом деле что, мы должны пойти на это. И когда мы делаем инициализации, мы хотим сделать initWithNibName, а затем мы хотим сделать в строку View_iPhone, например. Вы можете игнорировать расслоение здесь. И это происходит, чтобы позволить нам, на самом деле - Ой-ой, есть проблема. Верно. Так вот, есть проблема, потому что, в Мы считаем, шиб файл, у нас есть лейбл и у нас есть кнопка. Тем не менее, хотя мы связаны эти двое, нет ничего внутри ViewController.h или ViewController.m , которые отражают те кнопки или эти ярлыки. Итак, нам нужно написать те, в качестве свойства контроллера представления. Таким образом, это, как вы заявляете, свойство. Он принимает в, как правило,, эти два варианта. Для целей нам и этого семинара, Я бы сказал, что, в общем, большинство свойств неатомической и сохранить. Вы можете прочитать с помощью функции поиска Google, Вы знаете, разница между неатомической и сохранить на, вас знаете, Google или что-то. И я возьму вас к, как, Stack Переполнение, где люди будут иметь ответы на различиях между теми,. Но сейчас, это то, что мы хочу иметь дело с. И мы хотим сделать метку пользовательского интерфейса, звезда, и мы можем назвать это все, что хотим. Мы можем назвать это, вы знаете, этикетка. И мы создадим еще один один для кнопки. И не забудьте включить звездочку, потому что мы имеем дело с указателями в значительной степени всюду внутри из Objective-C. Однако, это все еще не решает проблема, как вы можете видеть здесь. И причина в том, что, когда мы хотите подключить метку шиб файла или Кнопка с программой, или заголовок и файл реализации, мы хотим добавить этот кусок кода - на выходе. Обратите внимание, что это ключевое слово. И, как только я закончу печатать что из, он должен иметь эти два круга, здесь. Как правило, они не заполнения Я не уверен, почему они. Но, как правило, вы будете иметь, чтобы вручную соединить их, зайдя в эту сторону площадь утилиты. И вот, прямо сейчас, я получил свой лейбл выбран, и я хочу, чтобы перетащить этот новый ссылаясь выход владельцу моего файла, а затем нажмите на Label. Так что теперь, наконец, эта метка связаны с этим ярлыком. И эта метка, что мы собираемся использовать программно изменить его Текст, его шрифт, его фон цвет, и так далее. Так, почему бы нам не сделать то то же самое для кнопки? И, как вы заметите, для кнопки, это немного сложнее. Потому что, я имею в виду, вы должны нажмите на кнопку, так что есть много вариантов, как пользователи можете нажать на кнопку. И потом, мы увидим позднее, что мы можем подключить его к нашей Код чтобы заставить его работать. Так, на данный момент, хотя, мы хотим подключиться это фактическому кнопки внутри нашего кода. Так мы идем в новое отделение ссылающейся, , а затем сделать кнопку. Теперь, давайте запустим это снова. Ой-ой. ОК. Я не знаю, что сейчас здесь происходит. Ух ты. Просто в один момент, здесь. На самом деле, почему бы нам не взять рассмотрим еще один пример в процентная времени. ОК. Итак, вот более легко получают пример для ViewController. Как вы можете видеть здесь, я включил свойства для этикетка и кнопка. И потом, этот кусок кода здесь - это IBAction - была связь с этой кнопкой здесь. Итак, как вы можете видеть здесь, Сенсорный внутри соединен с селектором называется нажатой кнопке. Так, мы можем фактически пройти движение снова, здесь, принимая подправить Внутри и перетащив его на Владелец файлов, а затем нажмите на кнопку нажатой. Теперь, давайте запустим наш код. Так что теперь, эта кнопка теперь работает и приведет нас к следующей странице. И, с точки зрения нашей точки зрения контроллера, это кусок кода, который взял заботиться о нажатой кнопке. И важно отметить,, что Я создал еще один тип представления контроллер называется таблицу вид контроллера. Так, это было похоже на спине в раскадровка, когда я вытащил один из эти с контроллерами в раскадровке. Я создаю другой Указатель на контроллере представления стол, Alloc и инициализации-ния его, а затем делать самостоятельно точка навигации контроллер, нажать ViewController, эта новая ViewController. И я поставил анимацию да, потому что теперь внутри моего приложения, и я хотите, чтобы действительно увидеть анимация собирается с главной страницы к столу вид контроллера. АУДИТОРИЯ: Вы все еще беспокоиться о сборке мусора? RHED SHI: Что это? Нет. Таким образом, вопрос был, есть ли у вас работать со сборкой мусора? Так, Xcode 4 имели как АРК, который является автоматический подсчет ссылок. Так вот, как правило, когда вы начинаете новый Проект, вы бы проверить это, потому что никто не хочет иметь дело с освобождения памяти и прочее. Но я думаю, в Xcode 5, нет даже этот вариант на новом проекте. Так, он автоматически сделает это за вас. Да? АУДИТОРИЯ: Можете ли вы экспортировать PDF в вашем раскадровки? RHED SHI: Да, определенно. Таким образом, все они будут включены в исходный код, так что вы, ребята, можете проверить фактический проект Xcode для него. Да? Зала: Но, я имею в виду, как, я могу распечатать PDF с моим раскадровки? Если я просто хочу, чтобы экспортировать изображения, чтобы показать кому-то. RHED SHI: О да. Я думаю, что, может быть, вы можете просто сделать снимок экрана. Да, и отправить им экран выстрел или что-то. Да. Так, давайте посмотрим. В целях экономии времени, я думаю, вот и все я могу охватить сегодня. Но, я знаю, что это, на самом деле, просто едва касаясь поверхности прошивкой развитие. Поэтому, пожалуйста, не стесняйтесь связаться со мной, если у вас есть какие-либо вопросы о прошивкой развитие. И, надеюсь, я буду в состоянии убрать некоторые из кода для источника код файлов, так что вы будете иметь некоторые действительно хорошие примеры для работы с. Кроме этого, если вы, ребята собираются к CS50 Hackathon, Я могу или может не быть там, и я могу помочь с некоторым развития IOS тоже. Так, большое спасибо, ребята.