Sobre los autores
Introducción
1. Cocoa: Definición
Breve historia
Herramientas
Lenguaje
Objetos, clases, métodos y mensajes
Estructuras
Cómo leer este libro
Convenciones
Código fuente
Errores habituales
Cómo aprender
2. Primeros pasos
En Xcode
Crear un nuevo proyecto
La función main
En Interface Builder
El área Utility
La ventana Blank
Para los más curiosos: Archivos xib y nib
Diseñar la interfaz
El Dock
Crear una clase
Crear una instancia
Establecer conexiones
Objective-C
Tipos y constantes en Objective-C
El archivo de encabezado
Editar el archivo de implementación
Generar y ejecutar
awakeFromNib
Documentación
Repaso del capítulo
Cronología de una aplicación
3. Objective-C
Crear y utilizar instancias
Utilizar clases existentes
Enviar mensajes a null
NSObject, NSArray, NSMutableArray y NSString
NSObject
NSArray
NSMutableArray
NSString
"Se hereda de" frente a "Utiliza" o "Conoce"
Crear clases propias
Crear la clase LotteryEntry
LotteryEntry.h
LottertEntry.m
Cambiar main.m
Implementar un método description
NSDate
Escribir inicializadores
Inicializadores con argumentos
El depurador
Repaso del capítulo
Analizador estático
Para los más curiosos: Funcionamiento de los mensajes
Reto
4. Administración de memoria
Vivir con el recuento manual de referencias
Lotería sin fugas de memoria
dealloc
Liberación automática de objetos
Utilidad de los objetos liberados de forma automática
Conveniencia de los objetos liberados de forma automática
Reglas de la cuenta de retención
Métodos de acceso
Vivir con el recuento automático de referencias (ARC)
Referencias fuertes
Referencias débiles
Peculiaridades de ARC
5. Destino/Acción
Subclases más utilizadas de NSControl
NSButton
NSSlider
NSTextField
Iniciar el ejemplo SpeakLine
Diseñar el archivo xib
Crear conexiones en Interface Builder
Outlet initialFirstResponder de NSWindow
Implementar la clase SpeakLineAppDelegate
Para los curiosos: Establecer target mediante programación
Reto
Consejos de depuración
6. Objetos de ayuda
Delegados
NSTableView y su elemento dataSource
Archivo de interfaz de SpeakLineAppDelegate
Diseñar la interfaz de usuario
Establecer conexiones
Editar SpeakLineAppDelegate.m
Errores habituales en la implementación de delegados
Delegados de objetos
Para los más curiosos: Cómo funcionan los delegados
Reto: Crear un delegado
Reto: Crear un origen de datos
7. Crear códigos de clave y valor
Códigos de clave y valor
Vinculaciones
Observar claves y valores
Crear claves para su observación
Propiedades
Atributos de una propiedad
Para los más curiosos: Rutas de claves
Para los más curiosos: Observar claves y valores
8. NSArrayController
Iniciar la aplicación RaiseMan
RMDocument.xib
Códigos de clave y valor y nil
Ordenar
Para los más curiosos: Ordenar sin NSArrayController
Reto 1
Reto 2
9. NSUndoManager
NSInvocation
Cómo funciona NSUndoManager
Añadir Undo a RaiseMan
Código de clave y valor y relaciones uno a varios
Observar claves y valores
Utilizar el puntero de contexto para defenderse
Deshacer para ediciones
Editar al insertar
Para los más curiosos: Ventanas y administrador de deshacer
10. Archivar
NSCoder y NSCoding
Codificar
Descodificar
La arquitectura de documentos
Info.plist y NSDocumentController
NSDocument
Guardar
Cargar
NSWindowController
Guardar y NSKeyedArchiver
Cargar y NSKeyedUnarchiver
Establecer la extensión y el icono del tipo de archivo
Para los más curiosos: Evitar bucles infinitos
Para los más curiosos: Crear un protocolo
Para los más curiosos: Guardado automático de documentos
Para los más curiosos: Aplicaciones basadas en documentos sin Undo
Identificadores de tipos universales
11. Fundamentos de Core Data
NSManagedObjectModel
Interfaz
Vistas de tabla basadas en vistas
Conexiones y vinculaciones
Cómo funciona Core Data
Para los más curiosos: Vistas de tabla basadas en vistas y en celdas
Reto
12. Archivos Nib y NSWindowController
NSPanel
Añadir un panel a la aplicación
Configurar el elemento de menú
AppController.m
Preferences.xib
File's Owner
Diseñar la interfaz de usuario
PreferenceController.m
Para los más curiosos: NSBundle
Reto
13. Valores predeterminados de usuario
NSDictionary y NSMutableDictionary
NSDictionary
NSMutableDictionary
NSUserDefaults
Precedencia de los distintos tipos de valores predeterminados
Establecer los valores predeterminados
El identificador de una aplicación
Crear claves para los nombres de los valores predeterminados
Registrar valores predeterminados
Permitir que el usuario edite los valores predeterminados
Utilizar los valores predeterminados
Eliminar la creación de documentos sin título
Establecer el color de fondo de la vista de tabla
Para los más curiosos: SUserDefaultsController
Para los más curiosos: Leer y escribir valores predeterminados en la línea de comandos
Reto
14. Utilizar notificaciones
Qué es una notificación
Qué no es una notificación
NSNotification
NSNotificationCenter
Publicar una notificación
Registrar como observador
Procesar la notificación recibida
El diccionario userInfo
Para los más curiosos: Delegados y notificaciones
Reto
15. Utilizar paneles de alerta
Hacer que el usuario confirme la eliminación
Reto
16. Localización
Localizar un archivo nib
Tablas de cadenas
Crear tablas de cadenas
Utilizar la tabla de cadenas
Para los más curiosos: ibtool
Para los más curiosos: Ordenar símbolos explícitamente en cadenas de formato
17. Vistas personalizadas
La jerarquía de vistas
Automatizar el dibujo de vistas
Crear una instancia de la subclase View
Inspector de tamaño
drawRect:
Dibujar con NSBezierPath
NSScrollView
Crear vistas mediante programación
Para los más curiosos: Celdas
Para los más curiosos: isFlipped
Reto
18. Imágenes y eventos de ratón
NSResponder
NSEvent
Obtener eventos de ratón
Utilizar NSOpenPanel
Cambiar el archivo xib
Editar el código
Crear una imagen en la vista
El sistema de coordenadas de la vista
Autodesplazamiento
Para los más curiosos: NSImage
Reto
19. Eventos de teclado
NSResponder
NSEvent
Crear un nuevo proyecto con una vista personalizada
Diseñar la interfaz
Establecer conexiones
Escribir el código
En BigLetterView.h
En BigLetterView.m
Para los más curiosos: Rollover
El cuadro azul
20. Dibujar texto con atributos
NSFont
NSAttributedString
Dibujar cadenas y cadenas con atributos
Mostrar letras
Configurar la vista para generar datos PDF
Para los más curiosos: NSFontManager
Reto 1
Reto 2
21. Pasteboard y acciones de destino nil
NSPasteboard
Cortar, copiar y pegar en BigLetterView
Acciones con destino nil
Analizar el archivo xib
Para los más curiosos: Qué objeto envía el mensaje de acción
Para los más curiosos: UTI y el portapapeles
UTI personalizados
Para los más curiosos: Copias ligeras
Reto 1
Reto 2
22. Categorías
Añadir un método a NSString
Para los más curiosos: Declarar métodos privados
23. Arrastrar y soltar
Convertir BigLetterView en origen de arrastre
Iniciar un arrastre
Después de soltar
Convertir BigLetterView en destino de arrastre
registerForDraggedTypes:
Añadir resaltes
Implementar los métodos de destino de arrastre
Añadir una segunda BigLetterView
Para los más curiosos: Máscara de operaciones
24. NSTimer
Diseñar la interfaz
Establecer conexiones
Añadir código a TutorController
Para los más curiosos: NSRunLoop
Reto
25. Hojas
Añadir una hoja
Añadir outlet y acciones
Diseñar la interfaz
Añadir código
Para los más curiosos: contextInfo
Para los más curiosos: Ventanas modales
26. Crear NSFormatter
Un generador de formato básico
Crear ColorFormatter.h
Editar el archivo xib
NSColorList
Buscar subcadenas en cadenas
Implementar los métodos básicos de un generador de formato
El delegado de la clase NSControl
Comprobar cadenas parciales
Generadores de formato que devuelven cadenas con atributos
Para los más curiosos: NS Value Transformer
27. Imprimir
Paginación
Para los más curiosos: ¿Se dibuja en la pantalla?
Reto
28. Servicios Web
Proyecto RanchForecast
NSURLConnection
Añadir análisis XML a ScheduleFetcher
Diseñar la interfaz
Escribir código de controlador
Incluir URL
Reto: Añadir WebView
29. Bloques
Sintaxis de los bloques
Memoria y objetos dentro de los bloques
Disponibilidad de los bloques
RanchForecast: Transmisión asíncrona
Recibir la respuesta asíncrona
Reto: Diseñar un delegado
30. Desarrollo para iOS
Adaptar RanchForecast a iOS
ScheduleFetcher
RootViewController
Añadir un controlador de navegación
ScheduleViewController
UITableViewController
Empujar controladores de vista
Reto
31. Intercambiar vistas
Primeros pasos
Crear la clase ManagedViewController
Crear elementos ViewController y sus archivos XIB
Añadir intercambio de vistas a MyDocument
Cambiar la ventana de tamaño
32. Relaciones Core Data
Editar el modelo
Crear clases NSManagedObject personalizadas
Employee
Department
Diseñar la interfaz
EmployeeView.xib
Eventos y nextResponder
33. Core Animation
Scattered
Animación implícita y acciones
Más detalles sobre CALayer
Reto 1
Reto 2
34. Concurrencia
Subprocesamiento múltiple
Un abismo desconocido
Subprocesos sencillos en segundo plano de Cocoa
Perfeccionar Scattered: Time Profiler en Instruments
Instruments
Análisis
NSOperationQueue
Subprocesos múltiples en Scattered
Sincronización de subprocesos
Para los más curiosos: Scattered más rápido
Reto
35. Cocoa y OpenGL
Una sencilla aplicación Cocoa/OpenGL
Diseñar la interfaz
Crear el código
36. NSTask
ZIPspector
Lecturas asíncronas
iPing
Reto: Archivos .tar y .tgz
37. Distribuir la aplicación
Configuraciones de compilación
Macros de preprocesador y configuraciones de compilación para modificar el comportamiento
Crear una versión de liberación
Instaladores
Aislamiento de aplicaciones
Privilegios
Acceso mediado a archivos y Powerbox
El Mac App Store
Validación de certificados
38. Fin alfabético