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 для структуры.
Я делаю эту опечатку на неустойчивой регулярной основе.