RHED SHI: Bem-vindo ao veja seminário CS50 - Introdução ao iOS. Obrigado a todos por terem vindo. Espero que você esteja tão animado como eu sou sobre o iOS. No ano passado, eu levei CS50 como um estudante de segundo ano, e eu basicamente aprendi iOS para o meu projeto final. E foi bastante - bem, não foi fácil, mas existem muitos tutoriais de apoio online. E eu realmente espero que com este seminário, eu vou dar a vocês uma cabeça iniciar o desenvolvimento iOS Então, em termos de desenvolvimento iOS, há duas coisas principais que nós quer cobrir hoje. Em primeiro lugar, o idioma - a linguagem vai ser em Objective-C. Nós, na verdade, vai ouvir algo realmente emocionante. Assim, você pode juntar-se a maçã inteira comunidade de desenvolvedores e construir alguns aplicativos realmente impressionantes. Além disso, o iOS 7 é linda, espero, para alguns de vocês. Mas é controverso, eu sei. E, principalmente, o que eu quero fazer é guia lo através de Objective-C, e também Xcode, que é o integrado ambiente de desenvolvimento que você vai ser trabalhando em para iOS. E assim, apenas uma palavra em Objective-C. Basicamente, é exatamente o mesmo que C, mas com um monte de outras coisas. E assim, mais estritamente, é realmente um de C. definir-super Então, qualquer coisa que você pode fazer em C agora, o que é basicamente como pset de 0 a 6, você pode fazer em Objective-C. Assim, não sente medo sobre essa nova linguagem que você vai aprender. Você já cobrimos um monte de que, porque você tudo feito C passado semestre, só que agora você vai ter muito mais para trabalhar. E eu só vou levá-lo através de um par de exemplos para destacar alguns das principais diferenças que eu encontrei foram quando realmente importante que eu aprendi Objective-C no ano passado. Bem, na verdade, por isso, o outro ponto é, Objective-C é, obviamente, orientada a objetos. E nós vamos discutir um pouco sobre o que isso significa mais tarde. Basicamente, é como como você trabalhou com structs neste pset passado, com nós e outros similares coisas assim. Exceto, em Objective-C, tudo é um objeto, e você vai ser passando em torno de ponteiros para objetos em vez dos próprios valores. Então, é apenas algo importante para se manter em mente. Então, por que não começamos com alguns diferenças de sintaxe entre C e Objective-C? Quero destacar o # include, você sabe, io.h padrão em C e C + +, com a versão Objective-C de que, o que é # importação, e depois de algum tipo de arquivo de cabeçalho. Neste caso, seria UIKit, você sabe, reduzir UIKit.h. Também poderia ser, você sabe, MKMapView para você cortar MKMapview.h se você quiser fazer, como, um mapa dentro do seu aplicativo. Coisas semelhantes assim. Então, o importante é incluir agora mudou para importar. Mas a idéia ainda permanece. Você vai ser a importação de algum tipo de arquivo de cabeçalho em seu programa. Também quero destacar a diferença entre printf e NSLog. No entanto, como dissemos anteriormente, Objective-C é um super-rigoroso conjunto de C, o que significa que existe printf em Objective-C, também. Mas, a maioria das pessoas não usam isso. A maioria das pessoas usam este NSLog porque dá-lhe um carimbo de tempo, e vamos ver -lo em ação mais tarde. Mas, é, geralmente, um mais útil maneira de imprimir variáveis. E eu também quero destacar que NSLog leva exatamente da mesma valores de espaço reservado como printf faz - assim% d é para um int, % F é para um float. No entanto, eu quero destacar este último um - NSLog% arroba - que é um espaço reservado para um objeto. E, como eu disse anteriormente, trata Objective-C muito bonito principalmente em objetos, e por isso este vai entrar em uso quando você pretende imprimir, talvez, talvez uma NSArray ou NSDictionary, ou um NSString. Assim, também, notar que, em nossa NSLog declaração, temos uma arroba na frente da citação - que é para significar que as cordas, agora, em Objective-C são objetos. Eles não são mais estrelas simplesmente de caracteres. Eles são objetos e são tratado como tal. Então, é muito importante que, quando você usa NSLog que leva em um NS corda, o que significa que você terá para incluir um no na frente de seu aspas. E é por isso que você vê, aqui, em todas as minha função chama a este NSLog, eu ter um no na frente das citações, mesmo embora a% d e% f de são todos a mesma a partir de C. Todas as perguntas até agora? Vou tentar passar por isso rapidamente, de modo que possamos ter mais tempo para trabalhar com Xcode e Objective-C, de modo que vocês podem obter mais familiarizado com ele. Em seguida, quero destacar algo conceitualmente importante. Assim, em C, a maioria das coisas são funções. Fazemos uma chamada de função. Declaramos funções desta forma, com o tipo de retorno primeiro, depois o nome da função, entre parênteses, e depois quaisquer que sejam os argumentos eo tipo de estes argumentos que queremos passar dentro E Objective-C, porque tudo é um objeto ou classe - assim classe e objeto são dois termos que são principalmente sinónimo uns com os outros, para que eu possa utilizá-los alternadamente durante todo o seminário. Mas, você vai ver que temos métodos em Objective-C, em vez de funções. E métodos pertencem aos objetos. Portanto, assim como, talvez tomar por exemplo, o nó - nosso tipo de [inaudível] nó de pset 6 ou 5 - temos a palavra, a propriedade, ou o próximo ponteiro nó. Os métodos são simplesmente funções dentro de algum tipo de estrutura. Assim, neste caso, a estrutura seria o objeto e, em seguida, o método é algo que pertence a um objeto. E é assim que você deve declarar, mais ou menos, um método. Você poderia começar com, mais uma vez, o retorno tipo - então, eu tentei cor codificar as palavras-chave aqui para que vocês Pode ver, pelo menos, a formatação semelhanças entre a função declarações e declarações de método. Então, você começa com, você sabe, um retorno tipo - neste caso, é uma matriz ou um ponteiro NSArray - e então você tem esse método. E então, o que é interessante aqui é que, em vez de ter parênteses, nós tem esses dois pontos. E então, na frente de nossos argumentos, nós colocar, de novo, entre parênteses o tipo de nosso argumento. Então, agora eu estou tentando fazer o comparação entre, você sabe, e n número, porque eles são ambos inteiros semelhantes. E então, o outro é um tipo NSUInteger. E então, com Objective-C, quando você quero ter vários argumentos em sua cláusula método, você, de alguma forma, separá-los mais ou menos como este - Eu não tenho certeza de como descrevê-lo, mas este é um bom exemplo de como você pode ter vários argumentos lá. Você pode, é claro, apenas totalmente ignorar o cólon andArray NSArray disposição se você quiser apenas um método que leva em um argumento. Sim, pergunta. AUDIÊNCIA: São ambos NSUInteger e NSArray argumentos que podem ser tomadas em dentro do NSArray? RHED SHI: sim. Então, deixe-me explicar. Então, sim. Assim, a pergunta era se NSUInteger e NSArray * tipos dos argumentos, e isso é correto. Assim, você sempre quer especificar o que o tipo do seu argumento é. E aqui, eu estou tentando apresentá-lo a algumas das sintaxe e vocabulário de Objective-C, de modo que esses são tipos reais que você estará lidando. E como você vai notar, matrizes já não são, de certa forma, coisas do suporte simples. Eles são objetos. Embora, se formos para a próxima slide, podemos ver o que pudermos codificar um NSArray em Objective-C com simplesmente um símbolo na frente de os colchetes. Eu não sou, na verdade, a certeza se Eu sintaticamente codificado uma matriz corretamente para a versão C, mas isso é deveria estar em uma matriz C. Então, isso é como você, você sabe, talvez usar as funções ou o métodos que criamos anteriormente. Certo? Então, este é o lugar onde nós declaramos nosso função e o nosso método. E agora queremos usá-los em o nosso programa, e este é como poderíamos fazê-lo. Assim, em C, você teria que, você sabe, talvez, um bool b, e você configurá-lo para igual a função, e depois você passa nos argumentos. Em Objective-C, que é muito quase a mesma coisa. Você tem NSArray * my_array, e é vai ser igual - agora, a única diferença aqui é essa coisa de objeto, que eu já destacada em amarelo, e como você pode ver, em C, não há nenhuma outra palavra amarelo. E é porque os métodos pertencem com um certo objeto. Então é por isso que eu preciso ter um objeto que, de alguma forma, chama esse método em o número zero, e em seguida, NSArray a, b, c, d. Qualquer dúvida sobre isso? Vamos ver esses conceitos em ação logo quando entramos em uma demo. OK. Agora, eu quero falar um pouco brevemente sobre Xcode 5, que é o ambiente de desenvolvimento integrado que você estará trabalhando. Eu sei que muitos de vocês, ou alguns de vocês, não têm Macs, que é um problema Xcode porque não está disponível para Windows e PC. Não me pergunte por que, mas provavelmente - sim, corporativo. Tanto faz. Mas de qualquer maneira, por isso, peço desculpas se alguns dos você tem que baixar algum tipo de máquina virtual para Mac em Para executar o Xcode 5. Mas é um muito bacana software para uso. E assim, antes de mergulhar em qualquer tipo de demonstração, eu só quero te mostrar uma imagem do que Xcode parece em sua janela e também falar sobre o que esse espaço todo é. Então, é mais ou menos como aprender a usar o Microsoft Word, exceto que você quer se familiarizar com toda a coisas diferentes que estão acontecendo aqui. Então, primeiro, eu quero que você aponte para a barra de ferramentas na parte superior. Você verá que, no topo, você vai ter o nome do arquivo - ou, na verdade, o nome do projeto e, em seguida, o nome do arquivo. Tome nota do jogo e os botões de paragem. Esses são os que você vai ser usando para executar o aplicativo no simulador - o simulador iOS. Isto vem automaticamente com o Xcode 5, assim você não precisa se preocupar com download de algum tipo de simulador. Você só aperta o play e em seguida, ele executa o seu aplicativo. E você pode brincar com você, e você vai ver como ele funciona mais tarde. E então, no centro, é claro, é onde todo o seu código bonito é indo. E então, no lado da mão esquerda, você tem isso, de alguma forma, pasta - navegação - e então, você também verá que, ao longo de com o ícone da pasta, há uma bando de outros ícones lá que será útil mais tarde. E então, no lado direito é um utilitário área onde você pode trabalhar com alguns dos objetos e especificar, você sabe, o que a cor deve ser, o que a fonte do texto deve ser, et cetera. Apesar de tudo o que você faz na área de utilidade, você pode fazer em código também. E assim, eu vou estar passando por dois exemplos de como usar, simplesmente, nenhum código de todos - ou código muito mínima - versos todo o código, apenas para que vocês saber o que você pode e não pode fazer em Xcode e Objective-C. E então, finalmente, para baixo, na parte inferior, você tem a área de depuração. Assim, você não precisa mais correr GDB, et cetera, em seus programas. Ele faz isso automaticamente para você. E você também pode imprimir material para esta área. Então, na verdade, mais tarde, nós vamos passar por mario.c, se vocês ainda se lembram que, no Xcode. Então isso deve ser divertido. E, em seguida, apenas para trazê-lo de volta para Objective-C, eu quero destacar o que você pode fazer com se declarações. Então, você sabe, porque Objective-C é um super conjunto de C, tudo que você faz é, literalmente, o mesmo que C. Você só tem pequenas diferenças. Então, você vai notar a forma de um se afirmação ainda é o mesmo - você tem se, e então você tem parênteses com uma condição dentro de, ela e, em seguida, chaves para tudo o que você quer fazer lá dentro. No entanto, eu queria colocar este slide-up aqui, simplesmente para ilustrar que, porque estamos lidando com objetos, agora, vamos ter que usar essas coisas chamado assim, é igual a string, que é, por acaso, um método de um string ou um objeto NSString. Assim, palavras, neste caso, é um NSString objeto, e ele tem um método chamado é igual a corda, e então nós estamos passando em uma string codificada para ver se estas forem iguais uma à outra. Todas as perguntas até agora? OK. E, eu quero ir mais uma instrução também. Assim, por exemplo, se quiséssemos fazer um loop ao longo do comprimento de uma string em C, este deve ser familiar para você. E, em Objective-C, eu quero para destacar isso, de alguma forma, método chamado contagem. Bem, na verdade, deixe-me basta ter isso de volta. Contagem é um método de matriz. No entanto, é mais especificamente um propriedade da matriz, que é porque você pode usar a notação de ponto. Mas eu não quero entrar muito de este material conceitual, eu só quero mostrar-lhe como as coisas pareceriam como em Objective-C contra C. E também, eu quero ressaltar que mesmo que eu tenho usado NSUInteger na frente de todos os meus eus em Objective-C, você também pode usar int, porque é int totalmente válida em Objective-C, também. Sim? AUDIÊNCIA: É apenas estilístico, ou seja - RHED SHI: Yeah. Então, como você vai ver - por isso, a questão é que foi apenas uma questão de estilo. Como você vai ver, eu tenho um, mais ou menos, estrela coisa asterisco, na parte inferior, e esse link leva você a um estouro de pilha formar, em que alguém explica a diferença entre um int em NSInteger e um NSUInteger. E assim, você pode ler sobre isso mais tarde. Estas corrediças vão ser, é claro, disponíveis para você. Vamos ver. OK, impressionante. Assim, este também é incluído na corrediça porque eu achava que isso era uma grande site que apresenta a sintaxe Objective-C. Então, na verdade, por que não vamos passar para Chrome e confira este site? Certo. Então, o que eu quero mostrar-lhe caras aqui é esta imagem. Então, isso é, de certa forma, vai ser o que você vai ver o interior de qualquer Arquivo Xcode. Na verdade, por que não basta ter um momento para, de alguma forma, levar isso dentro Assim, este livro - que é o objeto que estamos lidando. E então, é, obviamente, vai ser herdado de algum outro objeto, mas você não precisa se preocupar com isso. E, em seguida,, é, talvez, tem algumas variáveis ​​membro. A coisa importante que eu quero mostrar-lhe são os métodos de instância, aqui. Assim, os métodos de instância são indicados por este sinal de menos. E então, como você vai perceber, estamos já começando a ver o paradigma para declaração de método, certo? O tipo de retorno, o nome do método, e em seguida, o tipo do argumento, e em seguida, o nome do argumento. E este sinal negativo significa que é um método de exemplo, o que significa que estes métodos só estão disponíveis para objetos que foram instanciados. Para contrastar, que métodos com um plus assinar na frente deles são de classe métodos, o que significa que você pode chamar estes métodos, mesmo se você não tem um objeto criado ainda. Assim, para um exemplo claro, NSString é uma classe. E você pode chamar, por exemplo, métodos de classe NSString - o real, como, palavra NSString. No entanto, a fim de utilizar estes métodos, você realmente precisa criar uma string. Por exemplo, NSString corda estrela é igual a em aspa, Olá mundo. E então, você pode usar esses métodos - métodos de instância - sobre essa seqüência Olá mundo. Então, essa é a diferença entre métodos de instância e métodos de classe. E, nós coberto apenas esta parte. Propriedades são outra coisa que são dentro de objetos, basicamente. E você declará-los com a palavra-chave na propriedade. Você tem estas opções, aqui, que eu vou explicar mais tarde, quando vamos para uma demo. Sim? Oi. AUDIÊNCIA: Você poderia aumentar o zoom, por favor? RHED SHI: Ah, sim. Desculpe. AUDIÊNCIA: Obrigado. RHED SHI: Isso deve ser muito melhor. AUDIÊNCIA: Yeah. Obrigado. RHED SHI: Sim, por favor, lembre-me se Eu esqueço para ampliar ou diminuir o zoom. Então, isso é tudo que eu queria para mostrar-lhe para - Uau, isso é muito - para este site. Então, vamos voltar aos nossos slides. Na verdade, agora vamos dar um momento para mergulhar em uma demo. Então, vamos começar com uma novo projeto Xcode. Então, se você vai abrir o Xcode em todos suas máquinas, deve levar algum página onde diz, como, seja aberto se um projeto existente ou um novo projeto, e você deve clicar em um novo projeto. E então, deve tomar a esta tela. Sim? AUDIÊNCIA: Se não tem um Mac, nós apenas uma espécie de relaxar? RHED SHI: Ou olhar em com alguém, sim. É. Você pode relaxar também. OK. Então, o que vamos fazer primeiro, agora, é, na verdade, nós vamos fazer um aplicação única visão. Então, se você observar, o que é ótimo sobre Xcode e suporte da Apple para desenvolvedores é que você tem um monte de templates para trabalhar já. Você poderia, por exemplo, fazer uma aplicação mestre-detalhe. Você pode fazer um jogo - e na verdade, eu não vou entrar em jogos, porque os jogos são uma história diferente para o desenvolvimento do iOS. E eles estão tipo de separar, por isso não vou entrar nessa. Então, você tem baseado em página aplicações. Você tem um aplicativo de guia - assim como, por exemplo, o Bank of America provavelmente tem, assim, um aplicativo com guias. É aqueles onde você tem os botões na parte inferior. E então, você tem um jogo Kit Sprite. Ou você pode trabalhar a partir do zero, o que é o que vamos fazer depois. Mas vamos, em primeiro lugar, começar com uma única aplicação vista. Então, ele vai pedir um nome de produto, e nós podemos apenas fazer teste. Nome da organização - assim, o nome da organização, identificador de empresa - aqueles são importantes se você está indo para colocar seu aplicativo na App Store. Fora isso, seu código vai correr absolutamente bem sem isso. Isso vai ser importante se você quiser - assim, por si só, como, coloque o seu aplicativo para o seu telefone ou algo assim, e teste com isso, você sabe, na vida real - este vai ser importante. Isto tende a ser normalmente associada com algum tipo de conta de desenvolvedor com a Apple. E assim, eu sei, provavelmente, muitos de vocês não terá quaisquer contas de desenvolvedores. Eu sei que a universidade tem um. Eu acho que CS tem um. Mas, você pode me enviar e-mail e eu vou tentar para descobrir isso para você. Mas agora, eu acabei de colocar em algumas coisas aqui de espaço reservado. E você pode, é claro, aqui, escolha se você quer que ele seja o único em iPhone, no iPad, ou ambos - aplicação universal. Assim, por agora, vamos fazer universal, apenas ver ambos os lados da plataforma. Vamos ver. Então, agora, eu vou salvar -lo em algum tipo de pasta. Não importa onde - você sempre pode movê-la mais tarde. E, agora, somos levados ao nosso projeto Xcode. Eu não me preocuparia com tudo isso. Sugiro não tocar em qualquer isso, a menos que você saiba exatamente o que você está fazendo. Então, tudo isso, apenas ignore na sua maior parte. Você não vai precisar de tocá-lo, e se você você estragar algumas coisas aqui, fica um pouco complicado. Então, por que não olhar para os arquivos no lado esquerdo em nosso navegador. Aqui, temos AppDelegate.h. Temos AppDelegate.m Então, como você vai aviso prévio, temos arquivos de cabeçalho, que terminar em ponto h, e nós temos implementação - Na verdade, deixe-me zoom in OK. Deixe-me zoom in Certo, então você tem arquivos de cabeçalho e você tem arquivos de implementação. Na verdade - OK. Isto é um pouco estranho, mas pense comigo. Então, porque nós escolhemos uma única visão aplicação, nós vamos ser trabalhar com storyboard. Então, storyboard é algo que a Apple surgiu com a realmente ajudar desenvolvedores rapidamente protótipo suas aplicações. Então, este é o lugar onde você pode criar um aplicativo sem escrever uma única linha de código. No entanto, em nossa aplicação único ponto de vista, nós, é claro, tem um arquivo para o nosso ponto de vista, o que é um controlador de ponto de vista. Então, nós temos o cabeçalho eo arquivo de implementação, aqui. E, eu estou indo para afastar agora porque vamos precisar para trabalhar no storyboard. Então, aqui está o nosso ponto de vista. Se nós, simplesmente, executar o aplicativo agora, não há muito emocionante acontecendo. Assim, você verá esta tela branca. OK? E, em nossa área de utilidades, podemos adicionar um monte de coisas diferentes para ele. Então, quando você está lidando com telas em iOS, controladores de vista são o objetos que encapsulam, de alguma forma, os seus pontos de vista. Assim, um controlador de vista sempre tem uma propriedade chamada vista. E esse ponto de vista, normalmente, contém, você sabe, o que você quero ver em uma tela. Então, bem, vamos começar por colocar, talvez, talvez um marcador. Então, vamos colocar um rótulo em lá - colocá-lo no meio. Então, agora que eu cliquei no rótulo, eu pode ir para o inspetor de propriedades e começar a mudar o seu valor. Vamos chamá-lo CS50 Colours. E, eu também pode alterar o tipo de letra. Assim, em vez de fazer sistema, que é o padrão, podemos fazer um personalizado. Nós podemos mudar - você sabe, ultraleve, torná-lo 32. E então, nós podemos fazer a nossa caixa maior. AUDIÊNCIA: Você acha que você pode ampliar em apenas um pouco mais, talvez? RHED SHI: Sim? OK. AUDIÊNCIA: Basta tocar isso? RHED SHI: Vamos ver. Será que isso funciona? AUDIÊNCIA: Basta passar o Xcode? RHED SHI: Claro. OK. Incrível. AUDIÊNCIA: A etiqueta abaixo? O rótulo? RHED SHI: O que é isso? AUDIÊNCIA: O drop-down foi o rótulo abaixo? RHED SHI: Então, a pergunta era, o que drop-down foi o rótulo abaixo? Deve-se, simplesmente, estar aqui em baixo. Eu acho que é uma coisa cubo. Mas, geralmente, esse é o padrão - Eu só vou aqui até eu encontrar um rótulo. É. Então, agora, temos a nossa etiqueta. Vamos centrar-lo. E Xcode nos dá diretrizes para centrar objetos. Então, agora vamos executar o nosso código novamente. Lá vamos nós. Então, nós temos CS50 Colours. E agora, vamos colocar um botão lá, certo? Porque queremos fazer este interativo. Então, vamos colocar um botão aqui. E nós vamos chamar este botão "tap aqui para continuar. "Vamos centralizá-lo, também Na verdade, ele já está centrado. É. Então, agora temos um botão. E se correr novamente, nós vamos ter um pequeno botão agradável aqui. E eu posso clicar nele, mas ele não faz nada, porque não temos feito nada com o botão ainda. Então, vamos criar um outro ponto de vista, certo? Então, vamos dizer que eu quero tocar esse botão e eu quero ir para outra página - outro ponto de vista. O que eu vou fazer é, posso criar um controlador de vista, certo? Agora eu vou clicar no meu botão, e então, o importante é que eu vou clique - ou - sim, controle de imprensa no meu teclado. Controle. Clique no botão e arraste. Então, lembre-se de segurar a tecla de controle. Vamos fazer isso de novo. Então, segure o controle, clique e arraste para o que você quer fazer. OK. E agora, eu tenho várias opções aqui. I pode empurrar, ou eu posso fazer um modal, ou eu posso fazer um costume. Push é somente se você tiver uma controlador de navegação. Neste momento, a nossa primeira vista controlador não está dentro de qualquer controlador de navegação. Assim, o controlador de navegação é o que lhe dá o botão Voltar do o app iOS onde você tem, você sabe, que top, tipo, bar de espessura - onde você pode ir para trás, ou para a frente, et cetera. Agora, eu não tenho isso. E assim, é por isso que eu não posso fazer um empurrão. Então, eu cliquei no impulso acidentalmente, aqui. E, na verdade, vamos executar o código, e deve bater em mim. Só se eu pressionar o botão porém, assim que - direita. Então, isso é ruim. E, como você pode ver, aqui, nós tem a mensagem de erro. Então, "segues push só pode ser usado quando controlador de fonte é gerenciado por um instância do controlador de navegação UI ". Assim, porque este não estava dentro de um controlador de navegação, Eu não poderia fazer isso. Então, agora, eu vou voltar para o pasta, voltando ao storyboard. AUDIÊNCIA: Qual é a navegação controlador, de novo? RHED SHI: Então, agora eu vou te mostrar. Vamos ver. Então, eu estou indo para clicar nesta visão controlador, e então eu vou até o produto - Na verdade, não, desculpe - editor. E eu estou indo para ir para - Na verdade, se eu clicar sobre ele? Não. Lá vamos nós. Vou subir em editor, desça para incorporar, em seguida, navegação controlador. OK. E, meu espaço de trabalho parece muito confuso, então vamos limpar isso. Então, tudo isso é storyboard. E desta maneira - OK, pare - I pode rapidamente construir algo como esta. E então, agora eu posso voltar, sabe? Mas isso é meio chato, né? Então, o que eu quero fazer é, eu não quero de fazer, simplesmente, uma visão controlador. Digamos que eu queria realmente fazer uma controlador de exibição de tabela, para que eu possa colocar em algumas cores agradáveis, na tabela. Então, agora que eu coloquei na minha opinião mesa controlador, eu preciso conectá-lo de volta deste botão para o controlador de vista. Então, eu preciso fazer o meu controle, clique, arraste coisa novamente. E agora eu posso fazer pressão, porque eu incorporar lo dentro de um controlador de navegação. AUDIÊNCIA: Navegação controlador apenas permite-lhe ir de um lugar para outro? RHED SHI: sim. Então, mais tecnicamente, é um objeto onde - assim, no interior da navegação controlador de objeto, ele mantém o controle de uma matriz. E essa matriz contém todas as subsequentes visualizar controladores. É por isso que quando você pressiona para trás, vai voltar para a página anterior. Como o controlador de navegação objeto, ou o código que cuida de este objeto, tem uma matriz que mantém acompanhar desses controladores de visualização, e pode, então, você sabe, dq a visão controlador e dar-lhe de volta o anterior. Então, isso é coisa técnica, mas - e eu vou mostrar-lhe mais tarde, em código, se tivermos tempo. Eu sou o tipo de esgotar-se em tempo, mas - Assim, com a exibição de tabela, o que podemos fazer é - Geralmente é definida automaticamente para Prototype dinâmico - vamos fazê-lo células estáticas, caso contrário, vamos deparar com alguns problemas. E então, vamos dizer que eu vou para ter uma secção. Então, é como seções - se você já viu o aplicativo de música, quando você tem artistas, seções faria ser o de um meio Z's - - as letras e então, você sabe, o indivíduo linhas seriam os nomes dos artistas. E assim, o que é legal aqui, é que eu posso acessar todos os objetos dentro do meu storyboard através deste menu suspenso, também. Então, eu estou indo para clicar em minha seção, e eu quero, você sabe, talvez cinco linhas. E, em seguida, dentro de cada linha, Eu quero colocar um rótulo. E eu vou chamar este Azul. E então, eu quero colocar uma visão UI, você sei, talvez por, tipo, uma pequena caixa. Para que eu possa mostrar às pessoas uma pré-visualização da cor. E eu vou voltar para a propriedade e mudar essa cor para, oh, eu não sei sabe, um presente. E, em seguida, observe também, aqui, quando eu tenho os acessórios, eu posso ter muitos dos diferentes acessórios que você costuma ver. O indicador de divulgação, o detalhe, ou marca de verificação, ou simplesmente detalhes. Então, talvez possamos fazer, tipo, uma divulgação indicador, por exemplo. E então, por que não podemos ter estes, cópia colá-los e colocá-los no próxima linha da tabela. Assim, podemos chamar isso de amarelo. E eu poderia ter de estender essa. Vamos torná-lo amarelo. E, desta forma, podemos copiar cole nosso caminho. O que foi? Roxo. Portanto, estes são todos os CS50 típico cores que você já viu em sala de aula - Na verdade, sinto muito - ou no site. Espero que vocês possam ver o que eu estou fazendo aqui. OK. Último. AUDIÊNCIA: Como você adicionar a linha inicialmente? RHED SHI: Então, a pergunta era: como eu adicionar a linha inicialmente? Fui para esta seção da tabela - ou no entanto eu posso selecione a seção de mesa - e, então, aqui, eu atualizei o número de linhas. E, deixe-me esperança de que isso funciona. OK. Vamos ver se isso funciona. Oh, perfeito, incrível. OK. Enquanto eu estava construindo minha demo, alguns as coisas não estavam alinhados, assim, obrigado por os aplausos. É. Então, vamos ver. Nós vamos fazer isso apenas para fazer nove tudo - ou, na verdade, vamos apenas transformar tudo isso em divulgação indicadores. E então, o que eu quero mostrar-lhe, também, Foi assim que eu posso tomar cada um desses linhas da tabela e tê-los interagir - oh. Não. Oh. Além disso, eu quero mostrar-lhe - aqui, eu posso colocar o título do meu controlador de navegação, certo? Então, na verdade, você vai notar, assim que eu incorporado este controlador de vista interior do controlador de navegação, vemos esta barra de navegação no topo da nossa representação storyboard de um controlador de ponto de vista. E assim, isso nos dá, assim, um visual, de alguma forma, orientar a nossa tela visível. Isto é, obviamente, vai ser a barra de navegação. E o que eu quero fazer de forma rápida, agora, é colocar em outro - de modo que este controlador de exibição de tabela que eu fiz por tomando uma delas e arrastando-o aqui, e isso é o que me permitiu rapidamente, realmente, criar uma exibição de tabela controlador. Se nós temos o tempo, porém, você vai ver que, por meio de programação, é uma pouco mais complicado para criar uma tabela vista controlador, porque não um par de métodos que são necessário para que você possa, de alguma forma, escrever para fora, para que a vista da tabela controlador para ser exibido corretamente. No entanto, eu só quero te mostrar, agora, um exemplo de onde, se eu tirar isso, por exemplo - Eu coloquei em outro controlador de vista. E agora, vamos dizer que eu quero controlar alt meu primeiro azul linha da tabela para aqui. E eu quero chamar isso de azul. E então - vamos ver. Estou com a vista agora, e eu posso mudar o pano de fundo azul. E assim, o aviso prévio, aqui, este drop-down menu também lhe dá uma hierarquia de todos desses objetos. Então, uma coisa importante a notar, aqui, é que todas essas coisas, por aqui - este controlador de exibição de tabela, a tabela vista, a seção de exibição de tabela, exibição de tabela célula - todos estes são objetos, no código. Então, você sabe, um rótulo agora está sob o ponto de vista de conteúdo, et cetera. Assim por diante e assim por diante. Então, se executar este código, deve ver algo - vamos ver se isso - sim. Então, lá vamos nós. Mas, se não fizermos isso, nenhum dessas outras coisas funcionam. Certo? Então, só que este funciona. E, por uma questão de tempo, eu não vou entrar, você sabe, colocando para baixo os outros. E este é o fim de, tipo, storyboard - o que eu queria mostrar por storyboard. E, eu tenho um exemplo trabalhado, Na verdade, aqui. Então, este é o storyboard que fiz anteriormente. Então, como você pode ver, este foi meu controlador de navegação. Então, eu tive meu primeiro controlador de vista, então eu tinha o meu controlador de exibição de tabela, e então eu tive tudo isso - assim antes, eu estava fazendo algo muito diferente. Então, desculpe essas coisas. Eu provavelmente vou limpá-lo mais tarde, antes Eu enviá-lo para a produção. Mas, se executar este, vamos ver que todas as opções são disponível para nós. Só que eu não fiz os planos de fundo essas cores. Então, boa aplicação simples. Agora, vamos tentar resolver isso programaticamente. OK. Então, para fazer isso, nós apenas estamos indo para iniciar um novo projeto Xcode. Vamos torná-lo um aplicativo vazio agora, porque não quer ter o storyboard. Então, eu estou simplesmente restringindo-me a não usar qualquer um dos storyboard, e um aplicação vazio não vai dê-me um storyboard. Este é apenas para evitar me de fazer batota. Vamos ver. Espere. Did I - Sim. OK. Certo. Então, aqui, ficamos com nada mais do que código. Então, deixe-me mover esta janela um pouco mais. Certo. Como você pode ver aqui, os únicos arquivos nós estamos dando são AppDelegate.h e ponto m, e não temos storyboard mais. Então, se nós executar este, ainda estamos indo para chegar à tela branca, graças a Deus. OK - tela branca, mas nada mais. E aqui é a parte importante. Este é o lugar onde a ação acontece. Nas versões anteriores, não há geralmente nenhum código aqui, mas o storyboard fornece essencialmente o código para esta parte. Eu não vou entrar em detalhes sobre como. E o que nós queremos fazer agora é, nós queremos para entrar aqui, e este pequeno espaço começa a criar nosso aplicativo novamente. So - sim? AUDIÊNCIA: Zoom? RHED SHI: Zoom. Sim, claro. OK. Eu estarei escrevendo, e isso não deve importa muito. OK. Então, em primeiro lugar, lembre-se nós quisemos criar um controlador de navegação, certo? E também, como você pode ver aqui, Xcode faz um ótimo trabalho de auto-preenchimento. Então, como você vai notar, os nomes dos tudo é muito mais do que de costume, mas Xcode enche-lo para você. Então, eu posso apenas pressione Enter. Então, eu quero criar uma navegação UI ponteiro controlador, e eu posso chamá-lo navigationController. Agora, o que eu faço agora? Após este sinal de igual, eu preciso, em primeiro lugar, criá-lo dentro da memória. Então, eu vou fazer NavigationController alloc - por isso, este é semelhante ao malloc, que vocês usados ​​em C - e depois, vou para o init-lo. Então, é muito importante que qualquer objeto que você criar, você quer alloc e init-lo. Isso vai criá-lo e instantialize-lo dentro da memória, e agora você pode usá-lo. Tudo bem? Se você não fizer isso, seu objeto faz não existe, e você vai correr em um monte de problemas. E então, eu quero criar um controlador de vista, certo? Então, eu quero criar um UIViewController star - assim, tudo é um ponteiro em Objective-C, e eu vou fazer algo semelhante, aqui - alocação, o init. OK. E então, o que eu vou fazer é, eu sou vai - assim, lembre-se, quando fizemos a incorporar em controlador de navegação? Isto é como você fazê-lo em código. Você vai fazer navigationController pushViewController - AUDIÊNCIA: [inaudível]. Será que isto vai acontecer para nós, ou -? RHED SHI: Ah, sim. Não. Ele gosta mais de mim. Não, ele vai trabalhar para você, também. Portanto, estes são todos os métodos. Assim pushViewController é um método, e também, mais especificamente, é um método de instância da interface do usuário controlador de navegação. Porque eu tive que criar minha navegação UI estrela controlador, e então eu pode chamar esse pushViewController no meu exemplo específico de um sistema de navegação de UI controlador. AUDIÊNCIA: Nós temos que fazer exatamente o palavra, ou será que já existem para isso? RHED SHI: Sim, porque é um método. É como uma função. É como printf. É como scanf. É como strcompare. Só que sabe o que você pode querer digita, e observe que ele vai sempre venha com coisas que são legalmente permitido para você. Então, se nada aparecer por aqui, então algo está errado. Então, pushViewController. Então, agora, eu quero empurrar meu recém-criado UIViewController, e em seguida, animado - talvez não. Porque é que isto vai ser o primeiro controlador de vista. Quero dizer, mesmo que eu fiz de animação, ele provavelmente não vai aparecer, porque é a primeira tela. E lembre-se os suportes. Então, lembre-se de como costumávamos os suportes? E dentro dos colchetes, o objeto chama em um método - por isso o nosso objetivo é o de navegação controlador, e o método é um impulso controlador de vista animado. E ver como ele leva em dois argumentos, e eles estão separados pelo, tipo, palavras, e dois pontos. Então, Objective-C tenta torná-lo agradável e fácil para você ler em voz alta - seu código - e tê-lo semi, de alguma forma, faz sentido. No entanto, fazendo exatamente isso não é suficiente. Deixe-me afastar agora. Fazer apenas isso não é suficiente para conseguir o que nós conseguimos anteriormente. Então, aqui, você vai perceber que não há realmente não vai ser qualquer tipo de Bar, aqui, certo? Não há nenhuma barra de navegação, o que significa que ainda não tenham conseguido. E podemos testar isso, também, por, talvez, alterar o fundo de ViewController, certo? ViewController.background-- ah. Então, veja como ViewController não tinha uma cor de fundo, mesmo que eu queria acessá-lo? E isso é porque ViewController é um recipiente para a vista. Então, ele tem uma propriedade vista, que em seguida, tem uma cor de fundo. E, posso defini-lo, uma espécie de tediosamente, chamando a cor no objeto UIColor. Então, aviso aqui, RedColor é um método. É um método de classe de UIColor. Porque eu não tinha que criar um exemplo real de um UIColor em ordem para chamar o método nela. Eu apenas, simplesmente, chamou- sobre o nome do tipo-like. Eu, como, chamou-a em int, int, se tivesse, assim, um método a ele, por exemplo. E assim, se executar este código, vamos notar que o fundo é realmente não vermelho. Ainda é branco. E como podemos contornar isto é, observe como há o self.window. Isto é, como, o recipiente final para sua aplicação. É a última coisa que contenha tudo na tela, para um iPhone ou aplicativo iPad. E, convenientemente, self.window tem essa propriedade chamada RootViewController. E isso vai ser o ponteiro para o primeiro controlador de vista interior do seu aplicativo. Então, o que nós queremos fazer aqui, agora, é para definir que igual a nossa navegação controlador. Certo? Porque, tecnicamente, a navegação controlador é a nossa primeira vista controlador. Ele mantém o controle de uma matriz de outro ponto de vista controladores, e que empurrou este controlador em vista essa matriz no controlador de navegação. Então, você não quer fazer isso. Isso não seria realmente ajudá-lo. Você quer fazer isso, se você queria fazer um controlador de navegação, o que mais de vocês provavelmente porque você vai querer para, de alguma forma, têm algum tipo de, como, menu para voltar para ou algum homepage para voltar para, ao invés de um tela vazia. Sim? AUDIÊNCIA: É desconfortável para que você possa ampliar a - RHED SHI: Yeah. Então, sim. Este é o código, e agora Vamos testá-lo. Então, lá vamos nós. Magia. Então, OK. Obrigado. OK. Então, agora, o que nós queremos fazer é - então, nós estamos nos limitando, aqui, certo? Podemos potencialmente escrever tudo dentro deste uma função. Mas, isso não é como iOS desenvolvimento geralmente funciona. Então, o que nós vamos fazer é, estamos vai criar alguns novos arquivos. Mas, mais especificamente, vamos criar uma outra classe Objective-C, ou outro objeto - classe e objetos são intercambiáveis aqui. E, aqui está como eu poderia, potencialmente, criar uma outra classe de U controladores. Então, é uma sub-classe, como você verá, aqui, é uma sub-classe da Controlador de vista da interface do usuário, mas eu posso chamá-lo de qualquer outro nome aqui. Eu poderia chamar isso de CS50, eu poderia chamar este controlador de vista, eu poderia chamar este controlador de vista blá - o que eu quiser. Este é apenas o nome para a classe. No entanto, isso vai ser importante porque, essencialmente, o que estou fazendo aqui é, eu estou criando outro nome da classe. Então, ele vai ser, tipo, alguns espécie de tipo ou um objeto. Assim, ele deve ser um pouco mais genérica. Não vai ser muito específico. E também, eu quero apontar fora essas duas opções. Porque nós estamos fazendo tudo dentro de código, às vezes é muito mais fácil para trazer um arquivo de interface, de modo que Eu posso literalmente arrastar e soltar, como fizemos anteriormente com storyboard - você sabe, um rótulo, ou um botão, ou qualquer outra coisa. E assim, XIBs são arquivos que permitem que você Faça isso, e você tem que ligá-lo para este ficheiro controlador de vista. Então, eu vou deliberadamente não verificar isso. Normalmente eu iria verificar isso, e se eu só fez isso para iPhone ou iPad, eu iria verificar isso e simplesmente ter um para, você sabe, o iPhone ou o iPad. Mas desde que eu estou fazendo universal, eu vou para criar dois deles mais tarde. Então, eu vou deliberadamente desmarque esta. Isso também é muito importante. Muitas vezes, eu tive erros onde isso não foi verificado. E assim, obviamente, esse arquivo não é, tipo de, tipo, incluídos ou importados dentro desta pasta de teste. E assim, o meu código não tem absolutamente nenhuma idéia da existência deste arquivo, e que causa muita dor e horas de depuração. Mas, apenas certifique-se esta é verificada de modo que, você sabe, o alvo desta arquivo é para esta aplicação. OK. Então, agora nós criamos dois novos arquivos. E esses arquivos parecem muito vazio. E, na verdade, vamos também continuar pela criação dos arquivos xib. Então, antes, eu estava no Cocoa Touch drop-down. Agora, eu estou indo para ir para o Usuário Interface de toque, e como você pode ver, eu pode criar um storyboard. Assim, mesmo que eu comecei com um vazio aplicação, ainda posso usar um storyboard. Embora, fica complicado em termos de como você deseja se conectar que ao seu código. Então, eu não vou lá. Mas, o que nós queremos fazer agora é criar uma visão. E você pode escolher para um iPhone ou um iPad. E tipicamente, a identificar a diferença - se você está fazendo uma aplicação universal - você quer colocar um iPhone sublinhado, ou você pode fazer um Twiddly. Realmente não importa. É simplesmente para você se diferenciar que vista é para o qual dispositivo. E assim, agora olhar. Eu tenho uma tela que eu possa trabalhar. E assim, por exemplo, eu posso colocar um rótulo aqui, você sabe, e eu também pode colocar outro botão aqui. Eu não vou incomodar mudar os valores aqui. Mas, o que é importante aqui é que o dono do arquivo - assim, eu estou dentro do iPhone vista, arquivo iPhone xib. E para baixo nesta área de navegação ou menu drop-down, eu quero ir para o proprietário do arquivo. E esta é a verdade importante passo aqui. Eu quero fazer o ponto de vista de classe controlador, de modo que esse arquivo é xib vai ser associado com meu controlador de vista. E qualquer coisa que eu faço dentro do meu ponto de vista controlador de programação é vai ser refletido aqui. Então, no entanto, notar que - Na verdade, vamos fazer esse ponto de vista fundo azul, por exemplo. Ou verde. E então, por isso, se você observar, de volta este código, é aqui que chegamos ao nosso controlador de navegação. Mesmo que nós fizemos esse passo, é ainda vai ser vermelho, não verde. E há uma razão para isso. É porque, quando nós inited nosso controlador de vista, aqui - desculpe, é um pouco louco - quando inited nosso controlador de vista aqui, nós inited ele do tipo geral UIViewController. OK? Então, nós não até mesmo fazer com esta classe. Então lembre-se, isto é como uma aula agora. Ele pode ser pensado como um tipo, basta como UIViewController é um tipo. E, a fim de usá-lo, o que o que precisamos fazer é importá-lo - ViewController importação - e, como você pode ver, AutoPreenchimento para mim. Então, ViewController - e agora, aqui, eu posso mudar isso UIViewController para ViewController. E agora, aqui, eu posso mudar isto para ViewController. Vamos correr novamente. Ele ainda está vermelho. E a razão pela qual é ainda vermelho é porque - woah, o que aconteceu lá? Quisemos associar este xib arquivo com o controlador de vista. No entanto, a fim de realmente fazer que, precisamos entrar nessa. E quando fazemos o init, que queremos fazer initWithNibName, e então nós queremos fazer o em cadeia View_iPhone, por exemplo. Você pode ignorar o pacote aqui. E isso vai permitir que nós, na verdade - uh oh, há um problema. Certo. E assim, não é um problema porque, em nosso arquivo de visão xib, temos um rótulo e temos um botão. No entanto, apesar de ter ligado aqueles dois, não há nada dentro de ViewController.h ou ViewController.m que refletem as botões ou os rótulos. Então, a gente precisa escrever aqueles em que propriedades do controlador de vista. Então, é assim que você declarar uma propriedade. Leva em, geralmente, estas duas opções. Para efeitos de nós e este seminário, Eu diria que, em geral, a maioria das propriedades são nonatomic e reter. Você pode ler-se pelo Google busca, você sabe, a diferença entre atômica e reter, você sabe, o Google ou algo assim. E eu vou levá-lo para, como, Pilha Overflow, onde as pessoas terão respostas para as diferenças entre aqueles. Mas, por enquanto, é isso que nós quer se preocupar com. E nós queremos fazer um rótulo UI, estrela, e podemos chamá-lo de tudo o que queremos. Podemos chamar isso, você sabe, o rótulo. E, vamos criar outro um para o botão. E lembre-se de incluir o asterisco, porque estamos a lidar com ponteiros praticamente todos os lugares dentro de Objective-C. No entanto, isso ainda não vai resolver o problema, como você pode ver aqui. E a razão é porque, sempre que quiser conectar um rótulo xib ou um botão para o programa, ou o cabeçalho e arquivo de implementação, nós queremos adicionar este pedaço de código - saída. Observe que é uma palavra-chave. E, assim que eu terminar de digitar isso, ele deve ter estes dois círculos, aqui. Normalmente, eles não estão preenchidos Eu não sei por que eles são. Mas, geralmente, você terá que manualmente conectá-los, indo para este lado área de utilidades. E assim, agora, eu tenho a minha etiqueta selecionado, e eu quero arrastar esse novo referenciando saída para o dono do meu arquivo, e, em seguida, clique em Label. Então, agora, finalmente, esse rótulo é ligado a este marcador. E este rótulo é o que nós vamos programaticamente usar para mudar o seu texto, sua fonte, seu fundo cor, et cetera. Então, por que não fazemos o mesmo para o botão? E como você vai notar, para o botão, é um pouco mais complicado. Porque, quero dizer, você deveria imprensa em um botão, por isso tem um monte de opções para a forma como os usuários pode pressionar um botão. E então, vamos ver mais tarde que podemos ligar isso ao nosso código para que ele funcione. Assim, por agora, porém, que pretende ligar o para o botão real dentro do nosso código. Então vamos para a nova tomada de referenciação, e, em seguida, fazer o botão. Agora, vamos executar este novamente. Uh oh. OK. Eu não sei o que está acontecendo aqui agora. Whoa. Só um momento, aqui. Na verdade, por que não dar uma olhar um outro exemplo em o interesse de tempo. OK. Então, aqui está o mais prontamente preparado exemplo para ViewController. Como você pode ver aqui, eu incluído as propriedades para a rótulo eo botão. E então, este pedaço de código aqui - este IBAction - foi uma conexão com este botão aqui. Então, como você pode ver aqui, Touch Up Dentro está ligado ao selector chamado botão pressionado. Então, nós podemos realmente passar pelo movimento novo, aqui, tomando Retocar Dentro e arrastando-o para Proprietário do arquivo, e depois clique no botão pressionado. Agora, vamos executar o nosso código. Então, agora, esse botão agora funciona e vai nos levar para a próxima página. E, em termos de nosso controlador de vista, este é o pedaço de código que levou cuidar do botão pressionado. E é importante notar aqui, que Eu criei um outro tipo de visão controlador de chamada de tabela controlador de vista. Então, este foi semelhante para trás em storyboard, quando eu arrastei um dos esses controladores tabela vista para o storyboard. Estou criando outro Ponteiro para o controlador de vista de tabela, alloc e init-ing-lo e, em seguida, fazendo controlador de navegação auto ponto, empurrar ViewController, este novo viewController. E eu definir a animação para sim, porque agora dentro do meu aplicativo, e eu quer realmente ver a animação vai a partir da home page para a mesa controlador de vista. AUDIÊNCIA: Você ainda se preocupar sobre a coleta de lixo? RHED SHI: O que é isso? Não. Então, a pergunta era: você tem para trabalhar com a coleta de lixo? Então, Xcode 4 teve como ARC, que é contagem de referência automática. E assim, geralmente quando você inicia um novo projeto, você iria verificar isso, porque ninguém quer lidar com liberação de memória e outras coisas. Mas eu acho que no Xcode 5, não há sequer essa opção no novo projeto. Então, ele automaticamente faz isso para você. Sim? AUDIÊNCIA: Você pode exportar um PDF no storyboard? RHED SHI: Sim, definitivamente. Assim, todos estes serão incluídos em código-fonte, para que vocês podem conferir o projeto Xcode real para ele. Sim? AUDIÊNCIA: Mas, quero dizer, como, posso imprimir um PDF com o meu storyboard? Se eu só quero exportar o imagens para mostrar alguém. RHED SHI: Oh yeah. Eu acho que, talvez, você pode simplesmente tirar uma captura de tela. Sim, e enviá-los de uma tela tiro ou algo assim. É. Então, vamos ver. No interesse de tempo, eu acho isso é tudo que posso cobrir hoje. Mas, eu sei que é, na verdade, apenas mal tocando a superfície do iOS desenvolvimento. Então, por favor não hesite em contactar-me se você tem alguma dúvida sobre iOS desenvolvimento. E, com sorte, eu vou ser capaz de limpar um pouco do código para a fonte arquivos de código, de modo que você vai ter algum exemplos muito bom para trabalhar. Fora isso, se vocês estão indo ao CS50 Hackathon, eu pode ou não estar lá, e eu posso ajudar com algum desenvolvimento iOS, também. Então, muito obrigado, pessoal.