2009-10-30 10 views
8

Tengo un método de análisis RSS y necesito eliminar el espacio en blanco y otras tonterías de mi resumen html extraído. Tengo un tipo NSMutableString 'currentSummary'. Cuando llamo:NSMutableString stringByReplacingOccurrencesOfString Warning

currentSummary = [currentSummary 
     stringByReplacingOccurrencesOfString:@"\n" withString:@""]; 

Xcode me dice "aviso: la asignación de un tipo distinto de Objective-C"

¿Qué pasa con esto?

Respuesta

38

Si currentSummary ya es un NSMutableString, no debe intentar asignarle un NSString normal (el resultado de stringByReplacingOccurrencesOfString:withString:).

usar en su lugar lo mutable equivalente replaceOccurrencesOfString:withString:options:range:, o añadir una llamada a mutableCopy antes de la asignación:

// Either 
[currentSummary replaceOccurencesOfString:@"\n" 
           withString:@"" 
            options:NULL 
            range:NSMakeRange(0, [receiver length])]; 

// Or 
currentSummary = [[currentSummary stringByReplacingOccurrencesOfString:@"\n" 
                  withString:@""] 
        mutableCopy];
+0

¡Gracias! Funcionó muy bien. – quantum

+0

¡Maravilloso! ¡Muchas gracias! +1 –

0

Que por lo general significa que se retiraron los asteriscos en la definición de (en este caso) currentSummary.

Así que es muy probable que tienen:

NSMutableString currentSummary; 

cuando se necesita:

NSMutableString *currentSummary; 

En el primer caso, ya que las clases de Objective-C se definen en las estructuras de tipo, el compilador piensa que su tratando de asigna un NSString a una estructura.

Hago este error regularmente.

3

Esto funciona muy bien para los elementos anidados, así, por supuesto:

* Editado *

// Get the JSON feed from site 
myRawJson = [[NSString alloc] initWithContentsOfURL:[NSURL 
      URLWithString:@"http://yoursite.com/mobile_list.json"] 
      encoding:NSUTF8StringEncoding error:nil]; 

// Make the content something we can use in fast enumeration 
SBJsonParser *parser = [[SBJsonParser alloc] init]; 
NSDictionary * myParsedJson = [parser objectWithString:myRawJson error:NULL]; 
[myRawJson release]; 
allLetterContents = [myParsedJson objectForKey:@"nodes"]; 

    // Create arrays just for the title and Nid items 
    self.contentTitleArray = [[NSMutableArray alloc]init]; 

    for (NSMutableDictionary * key in myArr) { 
     NSDictionary *node = [key objectForKey:@"node"]; 
     NSMutableString *savedContentTitle = [node objectForKey:@"title"];   

     // Add each Title and Nid to specific arrays 
     //[self.contentTitleArray addObject:contentTitle]; 

     //change each item with & to & 
     [self.contentTitleArray addObject:[[savedContentTitle  
           stringByReplacingOccurrencesOfString:@"&" 
           withString:@"&"] 
           mutableCopy]]; 

    } 

El código de abajo, como se muestra en el caso de uso anterior podría ser útil.

[self.contentTitleArray addObject:[[contentTitle 
            stringByReplacingOccurrencesOfString:@"&" 
            withString:@"&"] 
            mutableCopy]]; 
+0

Hola, Pat! No estoy seguro de que tu respuesta realmente responda la pregunta. También recomendaría que, en lugar de explicar "contentTitleArray is ...", simplemente pudieras escribir un código de ejemplo. Ya sabe, el mínimo requerido para que tanto usted como la persona que formula la pregunta tengan una base común para entender lo que cada uno de ustedes quiere decir. ¡Gracias por tomarse el tiempo para escribir una respuesta, y buena suerte en Stack Overflow! – scraimer

+1

Bien, he avanzado y he agregado mi caso de uso. Espero que esto sea útil para los transeúntes. – Pat

Cuestiones relacionadas