TheRanking/theranking-ios-candidates — pull request #5 by Sesio (2014-11-13 00:18:39+00:00)
Title: App Fotos API 500px

Hola,
He tratado de hacer el ejercicio de la manera más sencilla posible, con un código limpio, aunque quizá el código necesitaría una refactorización para hacerlo más modulable, sin embargo al ser un ejemplo no demasiado complejo, he optado por código sencillo y rápido, sin tener en cuenta como digo la optimización del mismo.

-Comienzo con una plantilla "Empty Application" y construyo una primera vista para trabajar con archivos .XIB.
-Incorporo la API de 500px y añado las referencias del mismo a mi proyecto.
-Para el modelo, hago una simple llamada a la URL que indica la documentación de la API, con los parámetros necesarios para los datos que quiero, como bien dice la documentación se recibe un archivo JSON que guardo en un objeto de la clase NSData.
-Parseo el archivo JSON por medio de la clase NSJSONSerialization guardándolo en un diccionario.
-Para presentar los datos en la primera vista, he optado por la clase UICollectionView, para presentar los datos que solicitáis he creado una celda custom.
-Para mostrar los diferentes elementos de la vista detalle accedo a los datos recibidos en el JSON.
-Hay una problematica cuándo se trabaja con archivos JSON y la clase NSDictionary, y es que un diccionario no puede tener valores nulos, por ello he creado condicionales por cada objeto que quiero traer a la vista, estoy seguro que hay mejores formas de hacer esto, es decir que este código es optimizable casi con total seguridad.
-He usado GCD (Grand Central Dispatch) para cargar las imágenes en otro hilo diferente al hilo principal, además, después de descargar las imágenes, vuelvo al hilo principal para que se muestren en pantalla, pues como bien sabéis UIKit no es seguro en entorno multihilo.
-Ciertas partes de código están comentadas, también he incluido #pragma mark para facilitar la lectura de los diferentes métodos en secciones.

Con la esperanza de que el ejercicio sea de vuestro agrado.

Un saludo.
Sergio Becerril