Formato de un UITextField para moneda

Tengo un UITextField en mi aplicación que recibe solo entradas numéricas del usuario. Esta entrada numérica representa la moneda y tiene el valor predeterminado de 0.00.

Me gustaría crear algo como una máscara para formatear el UITextField cuando el usuario ingrese los números. Por ejemplo:

9 se convierte en $ 0,09 99 se convierte en $ 0,99 999 se convierte en $ 999,99

El siguiente código funciona muy bien, pero como estoy usando valores enteros y flotantes, la aplicación finalmente mostrará valores erróneos después de cierto punto. Por ejemplo:

999999999 se convierte en 100000000

Esto sucede porque flot y integer no son lo suficientemente precisos y se debe usar NSDEcimalNumber. El punto es que no puedo averiguar cómo reemplazar mis enteros y valores flotantes a NSDecimalNumber.

¿Alguien podría darme una mano para resolver esto? Pasé un tiempo buscando en la web una solución, pero no encontré que se adapte a mis necesidades y a muchas personas con el mismo problema.

Aquí está el código:

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (textField.tag == 1){
    NSString *cleanCentString = [[textField.text componentsSeparatedByCharactersInSet: [[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];
    NSInteger centValue= cleanCentString.integerValue;

    if (string.length > 0)
    {
        centValue = centValue * 10 + string.integerValue;
    }
    else
    {
        centValue = centValue / 10;
    }

    NSNumber *formatedValue;
    formatedValue = [[NSNumber alloc] initWithFloat:(float)centValue / 100.0f];
    NSNumberFormatter *_currencyFormatter = [[NSNumberFormatter alloc] init];
    [_currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    textField.text = [_currencyFormatter stringFromNumber:formatedValue];
    return NO;
}

if (textField.tag == 2){
    // Nothing for now
}

return YES;
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta