Pregunta

Tengo un método setter (setMinimumNumberOfSides) que desea anular después de usar sintetizar. En ella, estoy poniendo en una restricción en la variable de instancia para asegurarse de que el int es dentro de ciertos límites.

Más tarde, en un método init personalizada, Soy la creación de otra variable de instancia (numberOfSides), pero que necesita para asegurarse de minimumNumberOfSides y maximumNumberOfSides se establecen correctamente dentro de ciertos límites. He intentado cambiar el valor de retorno de la incubadora a una BOOL, por lo que podría pasar de nuevo un SI o NO si tenía éxito / fracasó, pero que creó un método en conflicto, supongo que porque estoy usando sintetizar y anulando el colocador.

¿Cómo puedo obtener la información con facilidad a comprobar para ver si el colocador fue llamado y regresó con éxito?

-(void)setNumberOfSides:(int)sides
{
    if ((sides < maximumNumberOfSides) && (sides > minimumNumberOfSides))
    {
        numberOfSides = sides;  
    }
    else
        NSLog (@"Invalid number of sides: %d is outside the constraints allowed", sides);


}

-(void)setMinimumNumberOfSides:(int)minimum 
{
    if (minimum > 2)
        minimumNumberOfSides = minimum;

}

-(void)setMaximumNumberOfSides:(int)maximum 
{
    if (maximum <= 12)
        maximumNumberOfSides = maximum;

}

-(id)initWithNumberOfSides:(int)sides minimumNumberOfSides:(int)min maximumNumberOfSides:(int)max 
{
    if (self = [super init])
    {
        self.minimumNumberOfSides = min;
        self.maximumNumberOfSides = max;

        self.numberOfSides = sides;
    }
    return self;
}
¿Fue útil?

Solución

Usted no tiene que sintetizar numberOfSides si usted está planeando sobre la aplicación de la get y set. Sin @synthesize numberOfSides puede devolver un BOOL si lo desea. Tendrá que declarar el captador / definidor en su interfaz en consecuencia.

BTW, otro enfoque sería utilizar el getter / setter sintetizado y añadir un -(BOOL)isNumberOfSidesValid método separado que realiza esta comprobación.

Otros consejos

En una situación como esta, puede ser mejor usar una simple llamada a assert(), o lanzar una excepción.

La elección dependerá de cómo se ve esta clase que se utiliza. Si va a ser parte de una biblioteca, y esperar otros desarrolladores para abastecer con frecuencia valores incorrectos para minimumNumberOfSides o maximumNumberOfSides, probablemente debería lanzar una excepción adecuada.

Una palabra de advertencia, sin embargo. Si usted espera que el usuarios de la aplicación para suministrar con frecuencia valores incorrectos, a continuación, una excepción es una mala idea. El manejo de excepciones en Objective-C es una operación costosa. Si estos controles están en su lugar por el bien de los usuarios, debe realizar la validación de entrada, e informar de errores al usuario de una manera mucho más amigable.

editar Aquí hay algunos ejemplos de código rápida:

-(void)setMinimumNumberOfSides:(int)minimum
{
    if (minimum <= 2)
    {
        [NSException raise:@"invalid minimumNumberOfSides value"
                    format:@"value of %d is too low (must be > 2)", minimum];
    }

    minimumNumberOfSides = minimum;
}

editar Aquí es otra cuestión de forma que entra en detalles sobre el manejo de excepciones en Objective-C.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top