viernes, 29 de agosto de 2014

Temporizador

Hola:

He creado un temporizador con swift. Cuando se activa manda eventos regularmente a un objeto y método determinado. La activación requiere un objeto de destino, un método de este objeto que trate el evento, un intervalo de tiempo entre eventos y una duración del temporizador. El método no puede tener parámetros.

El código está en una clase pero se puede extraer la función activa y reutilizarla para lo que se quiera.

//
//  VRTemporizador.swift
//  VR017Timer
//
//  Created by Víctor José Rodriguez Martin on 23/08/14.
//  Copyright (c) 2014 es.com.vjrm. All rights reserved.
//

import Cocoa
import Foundation


class VRTemporizador: NSObject {
    
    /*
     * Función activa() : crea un temporizador de duración determinada que lanza periódicamente eventos que son tratados por la función de un objeto
     *
     * @param objetivo  : objeto que tratará el evento. Debe estar creado antes.
     * @param funcion   : nombre de la función que tratará el evento. No puede tener parámetros.
     * @param intervalo : intervalo de tiempo entre evento y evento
     * @param duracion  : duración máxima del temporizador
     */
    func activa(objetivo: AnyObject, funcion: String, intervalo: Double, duracion: Double){
        // Crear el temporizador
        var temporizador = NSTimer(timeInterval: intervalo, target: objetivo, selector: NSSelectorFromString(funcion), userInfo: nil, repeats: true)
        // Crear el bucle de sondeo
        var bucleSondeo:NSRunLoop = NSRunLoop.currentRunLoop()
        // Calcular la fecha de finalización del bucle de sondeo
        var tiempoFinal:NSDate = NSDate(timeIntervalSinceNow: duracion)
        // Añadir el temporizador al bucle de sondeo
        bucleSondeo.addTimer(temporizador, forMode:NSDefaultRunLoopMode)
        // Poner en funcionamiento el bucle
        bucleSondeo.runUntilDate(tiempoFinal)
    }


}

Una llamada típica sería

var timer = VRTemporizador()
timer.activa(destino,funcion: "respuesta", intervalo: 2.0, duracion: 20)

Con un objeto "destino" que tiene un método "respuesta" sin parámetros.

Puede descargarse junto con un ejemplo de utilización en www.vjrm.com.es/swift/VR017Timer.zip

Saludos de Víctor.-

jueves, 28 de agosto de 2014

IBOutlet mal borrados

Hola de nuevo:

Me ha ocurrido lo siguiente: al desarrollar una aplicación con una vista que contenín una "label" y dos "button" hice IBOutlet de la etiqueta y también de los dos botones. Al advertir de mi error borré el código de los dos IBOutlet mal creados y cree dos IBAction de los botones. A partir de aquí la aplicación no funcionaba de ninguna manera. Luego de mucho trajinar llegué a la conclusión que al borrar el código del IBOutlet sólo se borra eso: el código, pero no el enlace. Así que tenemos un enlace que no enlaza nada.

La solución:

Vemos que hemos creado por error un IBOtlet de un botón y lo borramos, pero el encale sigue ahí y al ejecutar el programa tenemos un error en tiempo de ejecución:
Para resolver el problema borramos el enlace: pulsamos con el botón derecho del ratón en el botón que ha originado el problema y eliminamos el enlace pulsando en la cruz (Referencing Outlets/contento).
Hecho esto el problema desaparece.

Este progrma ha sido desarrollado gracias al libro: Aprende IOS de Juan M. Cigarran, muchas gracias!

Saludos de Víctor.-

Comienzo

Hola:

Recientemente he comenzado a programas en swift. Aún no existe mucha bibliografía sobre el tema. Así que me he decidido a publicar aquí aquellas cosas que he descubierto por mi mismo. Este blog no pretende ser un tutorial sobre este lenguaje de programación ni sobre cocoa, más bien un lugar donde se describiran los problemas que he tenido. Los iré colgando a medida que lor resuelva, pero sin más orden que el temporal.

Para comenzar quiero referirme a dos publicaciones que pueden bajarse gratuitamente de la appStore:
Es una introducción al lenguaje swift pensada para personas que han programado en Object-C o en C++. Tiene una primera parte en la que se explican las diferencias entre estos lenguajes y una segunda en la que hay una referencia completa de todas las instrucciones.
La segunda es una muy limitada resfencia al empleo de Cocoa y Objective-C desde swift.

Saludos de Víctor.-