NSMutableString stringByReplacingOccurferencesOfString Предупреждение - PullRequest
8 голосов
/ 30 октября 2009

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

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

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

Что с этим не так?

Ответы [ 3 ]

38 голосов
/ 30 октября 2009

Если 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];
3 голосов
/ 21 декабря 2011

Это прекрасно работает и для вложенных элементов:

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

// 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]];
0 голосов
/ 30 октября 2009

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

Так что у вас, скорее всего, есть:

NSMutableString currentSummary;

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

NSMutableString *currentSummary;

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...