Do you recall these icons of technology?
They were too good to be true! To good for their own sake!
Ok, acabo de empezar con este tema hoy pero aqui va la neta.
Git es una tecnología que le permite crear múltiples versiones de un proyecto asi como TimeMachine que nos toma fotos de nuestro disco duro en la Mac. La idea es poder regresar a cualquier punto en el tiempo y ver lo que se tenia.
El primer paso es GIT-habilitar el folder que uno quiere versionar. Esto se puede hacer manualmente desde la terminal con un git init o se puede crear un proyecto nuevo en XCode con la opción de Git Repository marcada. Ya que estamos usando XCode simplemente marquemos la opción de Git al crear un proyecto nuevo.
Ahora puede crear los archivos deseados y hacer los cambios necesarios. Ahora vamos a XCode-> Organizer y hacemos clic en el icono de REPOSITORIES. Aparece en la columna izquierda nuestro Repositorio llamado eraseme (que es el nombre que yo le di a mi proyecto). De ahora en adelante me referiré a mi folder como eraseme.
También veremos que dentro del folder de Repositorio aparece un folder amarillo de Branches, otro amarillo de Remotes y finalmente uno azul de eraseme.
En el folder de Branches creamos un Master Branch al agregar Add Branch o escribiendo “git push eraseme master” en la terminal desde adentro de nuestro eraseme folder.
Finalmente vamos al folder Remotes y Add Remote para conectarnos (si es que queremos compartir el proyecto en linea o con el servidor de alguien mas). Aqui simplemente ingresamos el URL del servidor donde ira el folder que queremos compartir con los demas.
Listo! Ya puedes comenzar a trabajar en linea con los miembros de tu equipo.
Usamos NSUserDefaults cuando por ejemplo queremos almacenar credenciales localmente en el dispositivo para que el usuario no tenga que reingresar sus datos cada vez que inicie la aplicacion. NOTA: No usen NSUserDefaults para almacenar grandes cantidades de informacion o datos que se cambian frecuentemente. iCloud o almacenes de datos persistentes como archivos de texto, xml y plists o bases de datos son ideales para cantidades mas grandes de informacion o aquella informacion que deba cambiarse frecuentemente. Una vez tienen la informacion lista para almacenar dentro de su aplicación, usamos este código: // Declaramos el objeto de almacen NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; // Set un objeto con su valor [prefs setObject:imageView.image forKey:@"keyToLookupImage"]; // Llamamos el sync para guardarlo [prefs synchronize]; Luego al iniciar la aplicacion llamamos la informacion de esta forma: NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSString *myString = nil; //Si myString = nil, entonces hagamos esto, de otra forma, hagamos algo distinto o nada... UIImage *retrievedImage = [prefs stringForKey:@"keyToLookupImage"]; imageView.image = retrievedImage; Su usuario le agradecerá el monton de trabajo que le acaba de ahorrar!
Hasta ahora hemos visto que las aplicaciones pueden ser para distintos iOS devices:
1) iPhone (con pantalla normal de 320 x 480 y con pantalla retina)
2) iPad (con pantalla 1024 x 768)
3) Universal (una aplicación donde se crean imágenes para ambos y depende del dispositivo donde corre la aplicación)
También aprendimos que una aplicación consta de archivos .h/.m con los siguientes por default:
1) AppDelegate Class que es la que basicamente maneja la logica macro. En nuestro caso llama a MainWindow.xib
2) MainWindow es un archivo xib, el cual es configurable graficamente, osea, WYSIWYG.
3) AppDelegate Class consta principalmente del metodo appDidFinishLaunching que llama la ventana principal del programa.
4) AppDelegate Class puede contener instance variables, ivars, que usamos para almacenar contenido.
Ahora veremos los siguientes temas:
1) AppDelegate Class puede llamar otras ventanas, no solo la MainWindow.xib.
2) Podemos crear mas ventanas xib’s asociadas con su respectiva .h/.m Class y usarlas en lugar del MainWinow.
3) Cada clase que creamos tiene sus ivars y las podemos convertir en properties.
4) Los ivars sirven como objetos para ser usados en los distintos metodos de la clase.
5) Podemos mandar mensajes entre objetos para realizar ciertas funciones.
Veamos un poco la etapa de diseño donde determinamos que es lo que la app hará!
1. Layout. Aqui esta un layout sencillo de esta aplicación. Siempre es importante disenarlo para visualizar como funcionara y aclarar las ideas.
Sketched layout
En este diseno podemos ver que la aplicacion inicia con una ventana y la imagen de bienvenido. Al inicio la app debe realizar tareas basicas de cargado y al terminar esto nos presentara la ventana principal. En nuestro caso la ventana principal se llama My Users Screen. Un tap a cualquier usuario nos llevara al Detail Screen. Finalmente, si mira en la parte inferior de My Users Screen, vera 2 tabs; My Users & PublicTimeline. My Users tab esta sombreada para representar que esta seleccionada. Si el usuario hace tap en PublicTimeline, la app lo llevara al tab del Public Timeline de los usuarios (esta es nuestra Public Screen).
2. Tipo de App. Como pueden ver, esta aplicacion sera un par de tabs cada uno con su propio contenido. Este es un diseno muy comun y se llama y es controlado por un Tab Bar Controller. Un TabBar Controller es un controlador que administra varios tabs. (En un curso completo revisaremos esos temas. Por mientras puede ver el curso en ingles aqui). Cada vista en la pantalla se llama un view y debe tener un controlador. La view sencilla o mas basica es administrada por un UIViewController. Una view de tipo lista de celdas es administrada por una UITableViewController. En nuestro caso una serie de UIViewControllers estaran encaspsulados en los tabs y por ende deberan ser administrados por un UITabBarController.
Un Table View Controller es un controlador de una list de celdas, cada una con su propia informacion. En nuestro case, para el My Users Screen, esa information sera el nombre de usuario de Twitter y su foto de perfil. Cuando hagamos tap sobre una celda de usuario nos llevara al Detail Screen. Este detail screen contiene los tweets individuales del usuario que seleccionamos en la pantalla anterior. La Public Screen tambien es una tabla con datos de usuarios publicos. Para hacer la aplicación facil de navegar hemos dividido la aplicación en 2 tabs: una privada y una publica. La tab privada contiene los usuarios que nos interesan y la tab publica contendrá todos los usuarios de Twitter, conocido como el Public Timeline.
3. Logica del App. Como sera el cerebro de esta aplicación?
4. Avanzado. Hay ciertos aspectos que no vamos a cubrir en este tutorial inicial porque seran muy facil de agregarlos mas adelante. Sin embargo hacen que una app sea muy amigable, lo cual para Apple es importante. Tan importante que tienen un Human Interface Guidelines PDF el cual detalla el tipo de facilidades que debe tener una app para ser aprobada. En el caso de nuestra aplicación de Twitter:
Ok ya tenemos nuestro diseno propuesto y la idea basica del tipo de proyecto que sera. Abramos XCode y comencemos!
———-
———-
Como pueden ver en el video, decidimos entre una aplicacion Window Based o View Based. Seleccionamos la Window Based porque es la mas basica que nos da una ventana vacia como punto de partida. Tambien notaran que las aplicaciones Window Based se pueden crear especificamente para iPhone, iPad o Universal. Universal significa que creamos el codigo para ambos dispositivos en un solo proyecto y la aplicación funciona para ambos.
Seleccionamos la Window Based porque como dijimos es el punto de partida básico para una aplicación. Esto nos da la libertad de agregar cualquier elemento en esta ventana. Si recuerdan, nuestra aplicación tiene como base 1 UITabBarViewController con 3 UIViews. Empezar desde cero únicamente con una ventana nos dará la flexibilidad de simplemente agregar el TabBarVC y luego asignar sus UIViews.
De haber escogido una View Based app; ya exisitiria una view adentro de la mainWindow como punto de partida. Eso significa que hubieramos tenido que borrar todo el codigo correspondiente para poder crear el TabBarVC como el punto de partida.
En este momento deberíamos tener dentro de nuestro proyecto, los siguientes archivos:
- Un AppDelegate (h & m)
- Una MainWindow.xib
Recuerden que todo los elementos visuales que creamos en XCode lo podemos codificar programaticamente o en InterfaceBuilder (IB). Tipicamente se combinan las dos metodologias por facilidad. En nuestro caso el AppDelegate contiene un metodo llamado appDidFinishLoading que es donde todo comienza.
Concepto.
Queremos crear un TabBarVC y poblar sus taba con los UIViews necesarios. UITabBarController es una clase como cualquier otra que se usa para crear objetos de ese tipo. Las clases son los planos para crear objetos. Asi que vamos a crear un objeto de este tipo alocando e iniciando una instancia de esa clase.
UITabBarController
También necesitamos agregar unos UIViews a cada tab del TabBarVC que recién creamos así que necesitamos alocar e iniciar instancias de esos objetos usando el llamado a sus clases respectivas. Asi cuando el usuario haga tap sobre el primer tab, TabBarVC llamara el primer UIVC. Cuando el usuario haga tap sobre el segundo tab, TabBarVC llamara el segundo UIVC.
————-
Osea que los pasos son:
1. Crear un objeto contenedor (TabBarVC usado como plano constructivo la clase UITabBarController)
2. Crear 3 objetos para los taba (UIViews usando como plano constructivo la clase UIViewController)
3. Agregar los 3 objetos al contenedor y decirle a la ventana principal que muestre el view. Como veremos, tendremos que agregar el view del TabBarVC al view the de ventana para hacerlo funcionar.
Codigo.
En su AppDelegate.m file, dentro de applicationDidFinishLaunchingWithOptions agregue:
// Crear el contenedor
UITabBarController *tabBarController = [[UITabBarController alloc] init];
// Crear 2 child views
UIViewController *usersArray = [[UIViewController alloc] init];
UIViewController *tweetView = [[UIViewController alloc]init];
// popular el array para tabBarController
NSArray *vcArray = [NSArray arrayWithObjects:usersArray,tweetView, nil];
// agregar los children al contenedor
[tabBarController setViewControllers:vcArray];
// Agregar el view controller’s view a la window & display
[window addSubview:tabBarController.view];
[window makeKeyAndVisible];
Perfecto! Ahora Great! Build & Run para ver como aparecen ambos tabs. Claro que no tienen nada adentro pero ahora cambiamos eso. Hasta ahora hemos ido paso a paso por lo que hariamos para crear la aplicacion desde cero. Sin embargo vamos a descartar este codigo y ya veremos porque.
Vamos a usar nuestra primera library o framework para conectarnos a Twitter. Ya que ese framework incluye un tweeting viewcontroller, nos ahorraremos ese codigo y el de la conexion a internet para enfocarnos en la estrategia macro. Asi que descarguen el codigo aqui: [Twitter Library Sample Project here].
Unzip el folder completo. Este sera el nuevo folder de nuestra aplicacion. Al abrirlo encontraras:
1. Classes incluyendo TwitterRushAppDelegate & TwitterRushViewController
2. Other Sources con el TwitterOAuth folder que incluye el Libraries y Headers folder, MGTwitterEngine folder y SAOAuthTwitterEngine folder.
Recordando nuestro codigo del inicio, tenemos nuestro delegate y 1 de nuestros child VCs, el tweetView para tweetear. Ahora solo tenemos que crear el usersVC para mostrar nuestros amigos y finalmente insertarlos en el tabBarController VC. Asi que agreguemos lo siguiente:
TwitterRushAppDelegate.h
@class TwitterRushViewController;
@class UsersListViewController;
TwitterRushViewController *viewController;
UsersListViewController *usersVC;
@property (nonatomic, retain) IBOutlet TwitterRushViewController *viewController;
@property (nonatomic, retain) IBOutlet UsersListViewController *usersVC;
Aqui estamos declarando de antemano, o forward declaring, que usaremos las clases TwitterRushViewController y UsersListViewController classes. Luego agregamos las ivars al @interface para esos 2 objetos. Finalmente los convertimos en propiedades. Solo falta una cosa mas; la clase UsersListViewController sue vamos a crear ahora. Hagamoslo ahora hacienda click derecho en el folder Classes, seleccionando Add New File, creando una subclass de UIViewController y de una vez convirtiendolo en un UITableViewController con un XIB asociado. Demosle el nombre UsersListViewController y hagamos click OK. Esto agregara la clase (h&m y en este caso su XIB) a nuestro folder de Classes.
Ahora si tenemos nuestros 2 child VCs declarados y listos para ser creados y luego insertados en nuestro contenedor. Asi que vamos al TwitterRushAppDelegate.m file y agreguemos:
// Crea el contenedor & declars nuestro usersVC
UITabBarController *tabBarController = [[UITabBarController alloc] init];
viewController = [[TwitterRushViewController alloc] init];
usersVC = [[UsersListViewController alloc] init];
// Popula el array para el tabBarController
NSArray *vcArray = [NSArray arrayWithObjects:usersVC, viewController, nil];
// Agrega el array de VCs a nuestro tabBarController (contenedor)
[tabBarController setViewControllers:vcArray];
// Agrega el view controller’s view a la window & display.
[window addSubview:tabBarController.view];
[window makeKeyAndVisible];
Por fin podemos Build & Run para ver ambos controladores dentro del contenedor. Podemos ver que el primer controlador tiene filas como un UITableViewController y el segundo tiene una UITextField y un boton para tweetear status updates.El segundo VC fue creado automaticamente para nosotros peru como puede ver, no tiene nada complejo. Es mas, crearemos uno igual mas adelante. Antes de terminar esta leccion, agreguemos algunos labels e iconos al tabBarController para que se vea mas presentable. Asi que nuevamente en el TwitterRushAppDelegate agreguemos:
viewController.title = @”Compose”;
viewController.tabBarItem.image = [UIImage imageNamed:@"user.png"];
usersVC.title = @”Friends”;
usersVC.tabBarItem.image = [UIImage imageNamed:@"user.png"];
Este codigo va justamente despues de los respectivos alloc/init para cada child VC. Estas lineas agregan una imagen y el titulo para cada tab. De manera que ahora debemos importar esos respectivos archivos de alguna parte de su computadora. De otra man era puedes encontrar algunos gratis en www.glyphish.com. Asignemos los nombres users.png y tweet.png. Ahora en Xcode seleccione Other Resources folder con un click, ahora en Project, Add To Project, encuentre esas imagenes y dele click Add. Asegurese de marcar la caja de Copy files to the project folder (if needed). Asegurese que aparezcan los 2 archivos en su Other Resources folder. Build & Run podemos ver una aplicación mucho mas presentable.
————–
Hasta ahora solo hemos trabajado con el UI, el intefaz de usuario. Finalmente en esta leccion trabajaremos con data en nuestra application. Nuestro TwitterRushViewController (viewController) contiene algo pero nuestro UsersListViewController (usersVC) aun no cuenta con el listado de usuarios que seguimos asi que agreguemoslo:
En UsersListViewController.h agregue lo siguiente:
// Aregue un ivar array para los usuarios
NSArray *usersArray;
// Conviertalo en una propiedad
@property (nonatomic,retain) NSArray *usersArray;
Luego en UsersListViewController.m agregue:
// Synthesize el usersArray
@synthesize usersArray;
// Poblemos el array con algunos usuarios (4 es suficiente) & nil terminamos el array como siempre
usersArray = [NSArray arrayWithObjects:@"marciokoko", @"mmars123", @"nrgea", @"santiapps", nil];
Busque el metodo NOSIT y retornemos 1 seccion:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections.
return 1; }
Busque el metodo NORIS y retornemos el numero de items de nuestro array de usuarios
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // Return the number of rows in the section.
return [usersArray count]; }
Finalmente en el metodo cellForRowAtIndexPath, CFRAIP, agregue la linea cell.textLabel.text …
// Configure the cell…
cell.textLabel.text = [usersArray objectAtIndex:indexPath.row];
return cell;
Guarde y Build & Run para ver como el listado de usuarios aparece en las files del tableview del primer tab. La idea sera que cuando hagan tap sobre el usuario deseado, la aplicación navegara 1 nivel mas abajo para llamar los tweets de ese usuario en otra tabla.
Visita nuestro foro para ver la discusión de este tutorial:
Santiapp iOS Forum
Este tutorial basico lo llevara desde el proceso de una imagen en la cabeza hasta la imagen digital para juegos, impresion u otro medio.
Los pasos básicos son:
1. Sketch la imagen en un papel usando los basic shapes (circle, rectangle etc). Este paso lo saltaremos ya que la imagen la hice directamente sin los basic shapes. Sin embargo en otro tutorial si comenzaremos desde los basic shapes.
2. Ahora refinamos ese first draft hasta tener un rough draft de la imagen final. En nuestro caso la mejoraremos mas adelante porque necesito poner esta imagen en mi juego de inmediato! Aquí es donde empezamos a trabajar.
Si quieres entender el primer paso mejor, miremos este personaje e imaginemos que empezamos con un circulo para la cabeza, un cono inverted para el cuerpo y dos triangulos para pies.
3. Una vez tengo esta imagen en papel, la escaneamos o la dibujamos directamente en la tableta (wacom) lo cual basicamente la convertira a un formato digital. Ya sea que la dibujamos en la tableta o la escaneamos de un papel, esta en formato de pixels y necesitamos traducirla a vectores para crear una imagen mas profesional.
4. Ahora tomamos la imagen de pixels y la ponemos en Inkspace o Illustrator y la ‘lock’eamos. Luego creamos un layer encima para trazar la imagen. Inkspace o Illustrator deberia lucir asi:
5. Ahora trazamos sobre las lineas de la imagen de pixeles. Aquí podemos usar el Pen Tool para escribir libremente o el Shape Tool que nos permite crear basic shapes que luego podemos unir de cierta forma que creamos las formas deseadas.
Aqui pueden ver como me quedo el ovalo del protector de orejas. Si, asi dibujo de mal, pero pronto lo arreglaremos. Los shapes basicos como circulos, rectangulos y muchos otros es mejor dibujarlos con el Shape Tool. Sin embargo hay otras formas que es mejor dibujarlas a mano y luego ajustarlas con lo nodos al final. Poco a poco aprenderemos cuales son mas faciles de hacer de cual manera. Asi que ahora convirtamos mi ‘crappy’ image en algo mas profesional.
6. (Tome la libertad de crear un circle para la cabeza y asi me ahorro mucho trabajo.) Trabajaremos con la parte inferior del face plate o la placa de la cara. Movamos la pieza inferior que trazamos hacia la izquierda y apliquemos un zoom…500%! Seleccionemos el Node Tool aparecen muchos nodos sobre la linea que nosotros trazamos a mano. Si seleccionas un nodo en Inkspace se pone rojo y le puedes dar delete con el teclado.
Sigue eliminando nodo de por medio y las lineas se haran smoother. Piensalo asi, si eliminaras todos los nodos menos las cuatro esquinas, quedariamos con el una especial de trapezoide que en efecto es uno de los shapes basicos. A mi me quedo asi:
La figura azul es la resultante y la negra es la original que yo traze. De hecho, a veces es mas fácil comenzar a delinear la figura de pixeles con la Bezier Tool que nos permite poner un nodo exactamente donde queremos y asi en lugar de tener que eliminar muchos nodos, es mas fácil simplemente agregarlos.
7. Una vez terminada la figura la retornamos a su lugar de origen y seleccionamos la Node Tool que nos permite convertir los nodos en smooth. Podemos ir seleccionando nodo por nodo y convirtiendolo en smooth o los podemos seleccionar todos (menos las 4 esquinas en nuestro caso) y luego los convertimos todos de una vez en smooth. En Inkspace el simbolo para convertir nodos en smooth es el que podemos ver aqui, donde la imagen ya tiene sus nodos convertidos en smooth y podemos ver una imagen mas profesional:
Si hacemos esto con las demás formas tendremos un dibujo mucho mas profesional y listo para ingresar al mundo digital de los juegos. Especialmente para juegos porque se pueden crear las diferentes frames de animación para un personaje como este con solo mover algunos nodos y cambiar la imagen que formara el siguiente frame.
Simple App #1
Vamos a crear una Simple App para que vean que facil es. Esta es la tipica Hello World App:
1. Crea un New Project llamado “Time”, que sea tipo Window Based App para iPhone only.
2. En AppDelegate.h agrega un IBOutlet UILabel *theTime; instance variable. Tu archivo .h file debería verse asi:
#import
@interface TimeAppDelegate : NSObject
UIWindow *window;
IBOutlet UILabel *theTime;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@end
3. En AppDelegate.m’s didFinishLaunchingWithOptions method arega:
[theTime setText:@"hello world!"];
4. Abre MainWindow.nib y arrastra una UILabel a la ventana. Luego con el TimeAppDelegate seleccionado, ve al Connections Inspector y conecta el theTime outlet a la UILablel adentro de la ventana. Tus conexiones deberian verse asi:
XCode Connections Inspector
5. Build & run la aplicacion.
Deberias ver una ventana de condo blanco con la UILabel mostrando el text “hello world!”. Congrats, ha creado su primera aplicación iOS.
Visita nuestro foro para ver la discusión de este tutorial:
Santiapp iOS Forum

Este curso será muy básico y se centrara en conceptos basicos de Objective-C, el lenguaje para programar para iOS. No se preocupe si nunca ha programado, este curso es perfecto para cualquier principiante y a veces es mejor empezar bien que empezar con conocimientos de programación que puedan distorsionar el aprendizaje.
Comencemos por definir que ObjC es un lenguaje basado en objetos. Esto significa que usted puede crear un objeto e instruirlo para comunicarse con otros. Los demás objetos pueden ser otros que usted ha creado u objetos que alguien mas ha creado y esto hace que ObjC sea realmente único y muy poderoso.
Imaginemos lo siguiente; nosotros creamos un objeto llamado “llanta” y otro llamado “chasis”. Podemos definir en la creación del objeto “llanta” que será circular y soportara peso y se moverá. También podemos definir que el objeto “chasis” será muy pesado, albergara hasta 2 personas y se moverá si tiene llantas. Finalmente es muy fácil decir que si agregamos 4 llantas y 1 chasis crearemos un “auto”. De modo que 4 objetos tipo llanta y 1 objeto tipo chasis deben ser creados primero. Luego los unimos para crear el auto y ya podemos meter gente en el y transportarla.
ObjC ya trae algunos objetos creados pero son objetos de programación como Strings que se usan para caracteres romanos y/o alfanuméricos, Numbers para digitos, Diccionarios para almacenar numeros o strings y otros mas avanzados que veremos mas adelante. Nosotros podemos crear objetos nuevos agregandole variables, objetos y métodos espeficos a nuestro objeto personalizado. Por ejemplo:
Un objeto Persona puede tener variables, objetos y métodos de la siguiente manera:
Persona {
NSString *nombre;
NSString *apellido;
NSString *email;
NSNumber *edad
NSArray *titulos;
NSDiccionario *mascotas;
}
-(void) saludarAlguien;
Para crear una persona, tenemos que definir sus variables u objetos (luego aprenderemos la diferencia entre variables y objetos):
Persona
nombre = Luis
apellido = Hernandez
email = luis.h@gmail.com
edad = 25
titulos = [bachillerato, bs, ms, phd]
mascotas = ({perro=spot}, {gato=miau}, {pajaro=piopio})
Los primero objetos del objeto Luis (nombre, apellido, email) son palabras como nosotros las conocemos. Los últimos dos son objetos programáticos diseñados para almacenar varios objetos de cierta forma. Un NSArray almacena objetos en una especie de lista sin orden donde uno se refiere a cada objeto adentro por medio de su puesto en el array. “bachillerato” esta en el puesto [0], “bs” esta en el [1], “ms” esta en el [2] y “phd” esta en el [3].
Ahora que tenemos este objeto Luis, con sus propiedades definidas, podemos crear a otro llamado Maria con distintas propiedades. Una vez creada Maria, podemos hacer que Luis y Maria se saluden. El saludo es un método o una secuencia de pasos que el objeto Luis tiene que realizar para saludar a alguien. Nostros podemos crear esa lógica de secuencia al crear el método saludarAlguien de la siguiente forma:
-(void) saludarAlguien{
"Hola, me llamo Luis Hernandez y tengo 25 anos. Mi correo es luis.h@gmailcom y tengo 4 titulos y 3 mascotas. Quisieras saber que titulos tengo o que mascotas tengo?"
}
Asi simplemente terminamos nuestro programa. Ahora podemos decir [Luis saludarAlguien]; y Luis saludara. La lógica es muy fácil de entender. Lo único es que existe un formato para crear objetos y comunicarlos entre ellos y es eso simplemente lo que hay que aprender. Esto significa que si usted entendió la lógica de crear un objeto y hacerlo comunicarse con otro, solo le falta aprender unas pocas cosas para aprender a programar en ObjC. Que fácil no?
Visita nuestro foro para ver la discusión de este tutorial:
Santiapp iOS Forum
Quieres ser el proximo millonario del internet?!
Visita nuestro sitio en www.santiapps.com para tutoriales sobre programación en iOS. Descubre lo fácil que es programar para esta plataforma tan popular y hazte millonario!
Tambien puedes acceder a http://quique123.wordpress.com para un blog en ingles sobre temas de programación un poco mas avanzados.