SplitViewController comunicació entre vistes master-detail

En un projecte iOS, podem arribar a treballar amb un UISplitViewController, a on entren en acció 2 vistes diferents: la part esquerra i part dreta. Normalment, la part esquerra serà una taula (Master) i la part dreta serà el detall de l’ítem seleccionat de la taula (Detail).

Si en un moment concret des del Master volem accedir a la part Detail, per poder actualitzar quelcom, cal utilitzar la propietat “splitViewController” que té la classe UIViewController. Aquesta propietat proporciona el UISplitViewController “pare” més proper del viewcontroller. Un cop tenim el UISplitViewController, podem accedir a l’array de viewcontrollers que el formen, el qual contindrà només 2 objectes: Master (0) i Detail (1).

Per altra banda, si la comunicació entre viewcontrollers és a l’inversa, cal fer un pas intermig. A més a més, d’utilitzar la propietat “splitViewController” en el Detail, quan obtenim el primer element de l’array de viewcontroller, s’ha de tenir en compte que aquest està dins d’un UINavigationController. Per tant, no podrem treballar directament amb ell:

 

 

Publicat dins de iOS | Etiquetat com a | Envia un comentari

Comprovar la connexió en iOS

Si la nostra app té la necessitat de connectar-se a Internet per enviar o rebre dades, cal abans assegurar-nos de que el dispositiu té connexió en aquell determinat moment. Per fer-ho, és de gran ajuda utilitzar una classe que proporciona Apple per fer aquest tipus de comprovacions, es tracta de la classe Reachability.

En el codi d’exemple (el trobareu aquí), es mostra com utilitzar les notificacions perquè l’app s’adoni de quan l’estat de la connexió canvia (això pot resultar molt interessant).

Per altra banda, si només es vol consultar l’estat de connexió en un moment donat, independentment del tipus d’aquesta, amb el següent codi n’hi ha prou:

 

Publicat dins de iOS | Etiquetat com a | Envia un comentari

Modificar el fons d’un UISearchBar

Ens trobem que el control referent a la barra de cerca en iOS té predefinits uns estils. Per canviar el fons del control cal:

 

Publicat dins de iOS | Etiquetat com a , , | Envia un comentari

Accedir per codi a un ViewController creat per StoryBoard

Creant una app mitjançant iOS 5.0 o superior, i utilitzant l’Storyboard per dissenyar el flux entre les diferents vistes, m’he trobat amb un petit problema.

Tinc una vista en forma de FormSheet creada a l’Storyboard, que té el seu ViewController associat i una segue associada des d’una altra vista.

Llavors, em trobo que des d’un altre ViewController creat per Storyboard, vull accedir a la vista anterior en forma de FormSheet. En el cas de que en aquest ViewController tingués els seus controls afegits via el mateix Storyboard, no hi hauria cap problema, ja que el que s’hauria de fer és crear una nova segue entre el control i la vista. Però, en aquest cas, la part visual d’aquesta tercera vista es crea per codi.

Per tant, per poder aprofitar el FormSheet anterior, i accedir-hi com si hi hagués una segue, cal que en el mètode associat al tap del control creat programàticament, s’hi posi el següent codi:

Com es veu, primer accedim a l’Storyboard, i posteriorment creem una nova instància del ViewController que volem (en aquest cas el nostre FormSheet). Aquesta nova instància es crea a partir del mètode instantiateViewControllerWithIdentifier en el qual li passem l’identificador de la vista. Aquest identificador, l’haurem d’haver configurat prèviament seleccionant el ViewController des de l’Storyboard i accedint al seu Inspector:

Publicat dins de iOS | Etiquetat com a , , , | Envia un comentari

Retornar informació d’una excepció a Silverlight a través de WCF

Si tenim un client Silverlight que per obtenir dades o executar processos ho fa a través de web services WCF, com podem dur un control i tractament de les possibles excepcions que es poden donar?

En un primer moment, es podria pensar que resulta similar al tractament d’errors en altres contextos…doncs bé, malauradament en Silverlight no és així. Els WCF suporten els anomenats “FaultContracts”, però Silverlight no suporta un service contract amb un fault contract. En cas de fer-ho el servei es convertiria inservible pels clients Silverlight. Per altra banda tampoc es podria “llençar” l’excepció i que el client Silverlight la capturi però, tot i que l’excepció s’enviarà correctament, serà el navegador qui no deixi passar aquesta informació. En aquest cas, l’únic que el client Silverlight rebrà serà una CommunicationException amb el missatge d’error “The remote server returned an error: NotFound”.

Com es pot comprovar l’error retornat no dóna cap pista de quin ha estat l’autèntic error que s’ha produït en el nostre WCF. Una possible solució seria utilitzar un paràmetre out en el servei utilitzant una wrapper type, la qual passi el tipus d’excepció juntament amb el missatge cap al client Silverlight.

El procediment del servei WCF quedaria de la següent manera:

La classe del tipus propi pel retorn de l’error:

Publicat dins de Silverlight | Etiquetat com a , , | Envia un comentari