He intentado comprobar la existencia de una subcadena en un NSString de dos maneras, ambas se han bloqueado. Este es un objeto NSString que obtengo de una de las propiedades de mi NSManagedObject.Comprobar la subcadena de NSString estrellarse
Usando NSRange
NSString *searchString = @"drive";
NSRange range = [text rangeOfString:searchString options:(NSCaseInsensitiveSearch)];
if (range.location != NSNotFound) { NSLog(@"Found"); }
Usando NSScanner
NSScanner *scanner = [NSScanner scannerWithString:text];
NSLog(@"%d",[scanner scanString:searchString intoString:nil]);
Ambos funcionan cuando text = @ "drive" pero causa EXC_BAD_ACCESS falla cuando el texto es "i drive", o "drive to". No ocurre nada si el texto es "idrive" o "driveto".
Aún más extraño, a veces los ejemplos lanzan NSInvalidArgumentExceptions, diciendo que traté de pasar un NSCFSet o un objeto DateComponents a rangeOfString: ninguno de los cuales uso en mi aplicación.
¿Alguna idea?
¿Qué es el texto? ¿Qué contiene? –
¿Qué método de llamada se bloquea? ¿Cómo se crea el texto? Mi apuesta es que el texto está sobre lanzado y ya no es válido. – zaph
@JeremyP Creo que lo que está sucediendo es que obtengo el atributo de cadena de mi NSManagedObject, así: text = managedObject.text; luego eliminaré ManageObject. Entonces, ¿tengo razón al decir que el texto no contiene una cadena, contiene un puntero a managedObject.text, que ya no existe? – ntesler