Modo pnetworkingefinido para convertir NSStrings generics en NSDates

Estoy buscando tener una forma para que el "text de date" ingresado por el usuario (por ejemplo, 3/3/1990 o 3-1-98) se formatee como un NSDate.

Podría implementarlo intentando formatear el text con varios formateadores de date, pero tengo la sospecha de que hay una manera mucho más fácil de hacerlo.

dateWithNaturalLanguageString: probablemente funcione, pero escucho rumores de que esto provocará el rechazo de la tienda de aplicaciones?

Está buscando NSDataDetector y devuelve los objects NSTextCheckingResult .

No estoy seguro de si esto cubre todo lo que necesita, pero la class NSDateFormatter tiene un método dateFromString: Si puede reconocer en qué tipo de formatting está la cadena y crear un object NSDateFormatter correspondiente, esto hará el truco.

Entonces NSDataDetector es mi taza de té, hice fuerza bruta al problema con algunas afirmaciones if-else introspectivas en un método de class. En caso de que a alguien en el futuro le interese:

 #import "TotalStringToDateFormatter.h" @implementation TotalStringToDateFormatter +(NSDate*) convertString:(NSString *)string { NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; NSDate* date; NSString* checkString; [dateFormatter setDateFormat:@"mm/dd/yyyy"]; date = [dateFormatter dateFromString:string]; checkString = [dateFormatter stringFromDate:date]; if ([string isEqualToString:checkString]) { return date; } [dateFormatter setDateFormat:@"mm-dd-yyyy"]; date = [dateFormatter dateFromString:string]; checkString = [dateFormatter stringFromDate:date]; if ([string isEqualToString:checkString]) { return date; } [dateFormatter setDateFormat:@"m/d/yyyy"]; date = [dateFormatter dateFromString:string]; checkString = [dateFormatter stringFromDate:date]; if ([string isEqualToString:checkString]) { return date; } [dateFormatter setDateFormat:@"md-yyyy"]; date = [dateFormatter dateFromString:string]; checkString = [dateFormatter stringFromDate:date]; if ([string isEqualToString:checkString]) { return date; } [dateFormatter setDateFormat:@"m/d/yy"]; date = [dateFormatter dateFromString:string]; checkString = [dateFormatter stringFromDate:date]; if ([string isEqualToString:checkString]) { return date; } [dateFormatter setDateFormat:@"md-yy"]; date = [dateFormatter dateFromString:string]; checkString = [dateFormatter stringFromDate:date]; if ([string isEqualToString:checkString]) { return date; } [dateFormatter setDateFormat:@"mm/d/yyyy"]; date = [dateFormatter dateFromString:string]; checkString = [dateFormatter stringFromDate:date]; if ([string isEqualToString:checkString]) { return date; } [dateFormatter setDateFormat:@"mm-d-yyyy"]; date = [dateFormatter dateFromString:string]; checkString = [dateFormatter stringFromDate:date]; if ([string isEqualToString:checkString]) { return date; } [dateFormatter setDateFormat:@"m/dd/yyyy"]; date = [dateFormatter dateFromString:string]; checkString = [dateFormatter stringFromDate:date]; if ([string isEqualToString:checkString]) { return date; } [dateFormatter setDateFormat:@"m-dd-yyyy"]; date = [dateFormatter dateFromString:string]; checkString = [dateFormatter stringFromDate:date]; if ([string isEqualToString:checkString]) { return date; } return nil; } @end 

No sería demasiado difícil hacer una versión withLocale, pero francamente no entiendo bien cómo se codifica Locale y no tengo necesidad de hacerlo desde ahora mismo