Introducción
Requisitos previos
Nuestra filosofía de enseñanza
Cómo usar este libro
La organización del libro
Opciones de estilo
Convenciones
Código fuente
Requisitos de hardware y software, y el proceso de instalación en los dispositivos
1. Una aplicación sencilla
Cómo crear un proyecto en Xcode
Manejo básico de Interface Builder
Model-View-Controller
Declaraciones
Declaración de variables de instancia
Declaración de métodos
Cómo realizar las conexiones
Configuración de los punteros
Configuración de objetivos y acciones
Resumen de conexiones
Implementación de los métodos
Compilar y ejecutar la aplicación en el Simulator
Programación orientada a eventos
Distribución de las aplicaciones
Los iconos de las aplicaciones
Imágenes por defecto
2. Objective-C
Objetos
Uso de las instancias
Desarrollo de la herramienta RandomPossessions
NSArray y NSMutableArray
Creación de subclases en Objective-C
Variables de instancia
Descriptores de acceso y propiedades
Métodos de instancia
Inicializadores
Self
Super
Cadena del inicializador
Métodos de clase
Las excepciones y la ventana de consola
Novedades en Objective-C 2.0
3. Gestión de memoria
Conceptos básicos en gestión de memoria
Gestión de memoria en lenguaje C
Gestión de memoria orientada a objetos
Recuento de referencias
Uso de retain counts
Cómo evitar las pérdidas de memoria mediante la liberación automática (autorelease)
Gestión de memoria en descriptores de acceso y propiedades
Reglas de retain count
La gestión de memoria en la aplicación RandomPossessions
4. El mecanismo de delegación y Core Location
Delegación
La aplicación "Whereami". Preliminares
Utilización de los frameworks
CoreLocation
Cómo recibir actualizaciones de estado desde CLLocationManager
Cómo liberar las variables de instancia de un controlador
Desafío: Orientación del dispositivo
Los errores del compilador y del enlazador (linker)
Protocolos
5. MapKit y Text Input
Diagramas de objetos
El framework MapKit
Propiedades de la interfaz
La vida como delegado de MapView
Nuestra propia clase de MKAnnotation
Etiquetado de localizaciones
Entrada de texto y el primer respondedor
Conformación final
Desafío: Extras de las anotaciones
Desafío: Codificación geográfica inversa
Desafío: Cambiar el tipo de mapa
Cómo cambiar el nombre de una aplicación
6. Creación de subclases de UIView
Creación de una vista personalizada
El método drawRect
Cómo crear una instancia de UIView
Cómo añadir texto y sombras
Cómo utilizar UIScrollView
Cómo habilitar la opción de ampliar la imagen
Cómo ocultar la barra de estado
Desafío: Los colores
Ciclos retain
Redibujado de las vistas
7. Controladores de las vistas
Controladores de las vistas y archivos XIB
Cómo utilizar los controladores de vistas
Creación del controlador UITabBarController
Cómo crear controladores de vistas y elementos para la TabBar
Creación de las vistas para los controladores de vistas
viewWillAppear
El ciclo de vida de un controlador de vistas
Desafío: Map Tab
Paging
8. El acelerómetro
Configuración del acelerómetro
Cómo obtener datos desde el acelerómetro
Orientación y escala de la aceleración
Cómo utilizar los datos procedentes del acelerómetro
Cómo suavizar los datos del acelerómetro
Detección de sacudidas
Desafío. Cambiar los colores
Frecuencia y filtrado de señales
9. Notificación y rotación
El centro de notificación
UIDevice Notifications
Autorotación
Cómo forzar el modo apaisado (Landscape mode)
Desafío: Notificaciones de proximidad
Cómo obviar la autorotación
10. UITableView y UITableViewController
Líneas maestras de la aplicación Homepwner
UITableViewController
Creación de subclases de UITableViewController
Origen de datos de UITableView
El protocolo UITableViewDataSource
UITableViewCells
Reutilización de la clase UITableViewCells
Desafío: Secciones
11. Modificación de UITableView
El modo de edición
Cómo eliminar filas
Cómo mover las filas
Cómo insertar filas
12. UINavigationController
UINavigationController
UINavigationBar
Un controlador UIViewController adicional
XIB y File's Owner
Configuración de ItemDetailViewController
Navegar con el controlador UINavigationController
Vistas que aparecen y desaparecen
Desafío: El teclado numérico
13. La cámara y el controlador UIPopoverController
ImageCache: Un singleton
NSDictionary
Singleton
Mostrar imágenes. La clase UIImageView
El controlador UIImagePickerController y la toma de fotografías
UIPopoverController
Cómo crear y utilizar claves
Cómo retirar el teclado de la pantalla
Desafío: Eliminar una imagen
Cómo grabar vídeo
14. Cómo guardar y recuperar datos. La multitarea
Application Sandbox
Cómo guardar los datos en archivos. El proceso de archiving
Archivado de objetos
Cómo añadir soporte a la multitarea
Desarchivar los objetos
Transiciones entre estados en una aplicación
Escribir en disco con NSData
Desafío: Archivado en la aplicación Wherewasi
Operaciones de lectura y escritura en disco
Application Bundle
15. Gestión de los avisos de memoria baja
El manejo de los avisos de memoria baja
Avisos de memoria del controlador de vistas
Simular avisos de memoria baja
16. Creación de subclases de UITableViewCell
Creación de HomepwnerItemCell
Cómo crear subvistas
La apariencia de las subvistas y el método layoutSubviews
Uso de la celda personalizada
Manipulación de imágenes
Desafío: Vistas accesorias
Desafío: Hagámoslo bonito
17. Gestos Multi-Touch, UIResponder y la herramienta Instruments
Los eventos touch
Creación de la aplicación TouchTracker
Cómo se transforman los gestos Touch en líneas
La cadena de respondedores
Instruments
El instrumento Allocations
El instrumento Sampler
Desafío: Grabar y recuperar datos
Desafío: Círculos
UIControl
18. La capa Core Animation
Cómo crear una capa CALayer
Contenidos de la capa
Propiedades "animables" de forma implícita
Creación de contenido mediante código
Capas y vistas
Desafío: Capas con contenido dinámico
19. Control de la animación con CAAnimation
Objetos de animación
El tiempo gira con CABasicAnimation
Funciones de control de tiempos
Finalización de la animación
Hacemos latir la hora con CAKeyframeAnimation
Desafío: Más animación
Las capas Presentation y Model
20. Reproducción multimedia y ejecución en segundo plano
La aplicación MediaPlayer
Cómo reproducir los sonidos del sistema
Cómo reproducir archivos de audio
Cómo reproducir archivos de vídeo
Los procesos en segundo plano
Otras formas de ejecución en segundo plano
API de bajo nivel
Desafío: Grabación de audio
21. Servicios Web
La aplicación TopSongs
Construcción de la interfaz
Cómo recuperar datos desde una URL
Cómo trabajar con la clase NSURLConnection
Análisis y formateo de los datos XML
Anatomía de una petición (request)
Desafío: Más datos
Credenciales
22. La aplicación Contactos
El selector de personas
Nuevos elementos en la clase Possession
Funciones de la aplicación Contactos
El otro método delegado
23. Localización
La internacionalización y la clase NSLocale
Localización de los recursos
NSLocalizedString y las tablas de cadenas de caracteres
Desafío: Una localización más
El papel de NSBundle en el proceso de internacionalización
24. Bonjour
Cómo publicar un servicio
Búsqueda de servicios
TXT Record
La conexiones Socket
25. Ajustes
Ajustes
NSUserDefaults
Registrar los valores por defecto
Cómo utilizar lo valores por defecto
Cómo garantizar los cambios en las aplicaciones suspendidas
26. SQLite
Primeros pasos con la aplicación Nayshunz
Creación de la base de datos
Cómo obtener datos
Desarrollo y utilización del árbol
Desafío: Recuperar más datos
Desafío: Objetos a medida
27. Core Data
Creación de la aplicación Inventory
Edición del archivo de modelo
El controlador AppController
El controlador LabelSettingViewController
El controlador LocationListViewController
El controlador AssetListViewController
El controlador CountViewController
Resumen del funcionamiento de la aplicación
Ventajas y desventajas de los mecanismos de persistencia
Primer desafío: Borrar
Segundo desafío: Personalizar subclases de NSManagedObject
28. Desarrollo de aplicaciones para el iPad
Aplicaciones universales
Portabilidad de aplicaciones al iPad
Rediseño de la interfaz de Wherewasi
Consideraciones adicionales: Controladores de vistas universales
N alfabético