NSMutableString stringByReplacingOccurrencesOfString Warning

У меня есть метод парсера RSS, и мне нужно удалить пробелы и другие бессмыслицы из моего извлеченного html-резюме. У меня есть тип NSMutableString 'currentSummary'. Когда я звоню:

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

Xcode сообщает мне "предупреждение: назначение из отдельного Objective-C типа"

Что случилось с этим?

Ответ 1

Если currentSummary уже является NSMutableString, вы не должны пытаться назначить ему обычный NSString (результат stringByReplacingOccurrencesOfString:withString:).

Вместо этого используйте изменяемый эквивалент replaceOccurrencesOfString:withString:options:range: или добавьте вызов mutableCopy перед назначением:

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

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

Ответ 2

Это отлично подходит для вложенных элементов, конечно же:

* Отредактированный *

// 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]];

    }

Код ниже, как показано в приведенном выше примере использования, может оказаться полезным.

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

Ответ 3

Это обычно означает, что вы сбросили звездочки в определении (в данном случае) currentSummary.

Итак, вы, скорее всего, имеете:

NSMutableString currentSummary;

когда вам нужно:

NSMutableString *currentSummary;

В первом случае, поскольку классы Objective-C определены в структурах типов, complier думает, что вы пытаетесь назначить NSString для структуры.

Я делаю эту опечатку на неустойчивой регулярной основе.