2015-12-22 4 views
1

я получаю от XML-файла следующего текста:stringByReplacingOccourencesOfString с NSMutableAttributedString

"Weekly menus from December 21<sup>st</sup> till 28<sup>th</sup>" и хочу, чтобы показать, как: «недельное меню с 21 го декабря по 28 ю»

-Tags - это потому, что XML-файл используется для html и iOS. Теперь я хочу «сдвиг» ЗБ/е/й/й в дате и сделал следующий код:

NSString *basicString = dieMenueDaten.SubtitelE; 

NSDictionary *attribute = @{(NSString*)kCTSuperscriptAttributeName: @1 }; 
NSMutableAttributedString *subStringTh = [[NSMutableAttributedString alloc] initWithString:@"th" attributes:attribute]; 
NSMutableAttributedString *newSubtitleE = [[NSMutableAttributedString alloc] initWithString:basicString]; 
NSMutableAttributedString *replaceTh = [[NSMutableAttributedString alloc] initWithString:@"<sup>th</sup>"]; 

NSRange laenge = NSMakeRange(0, basicString.length); 

newSubtitleE = [[newSubtitleE mutableString] stringByReplacingOccurrencesOfString:replaceTh withString:subStringTh options:NSCaseInsensitiveSearch range:laenge]; 

Doing это я получаю

несовместимых указателей типа отправку «NSMutableAttributedString *» в параметр типа 'NSString * _Nonnull'

и

несовместимые указатели типа assignin g до 'NSMutableAttributedString *' от 'NSString *'

Что мне делать, чтобы избежать сообщений об ошибках?

+0

Возможный дубликат [NSMutableString stringByReplacingOccurrencesOfString Warning] (http://stackoverflow.com/questions/1647292/nsmutablestring-stringbyreplacingoccurrencesofstring-warning) –

+0

похожи на этот дубликат, но вы пытаетесь смешать изменяемые и неизменяемые приписанные и простые строки , а не только изменяемые и неизменные простые строки ... – Wain

+0

Найдите все диапазоны и вместо этого используйте 'replaceCharactersInRange: withAttributedString:' вместо этого? – Larme

ответ

0

От NSString Class Reference

- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target 
            withString:(NSString *)replacement 
             options:(NSStringCompareOptions)options 
             range:(NSRange)searchRange 

Этот метод занимает 2 NSString параметров для мишени и замен, а не два параметра NSMutableAttributedString.

Вы также можете попробовать replaceTh.string и subStringTh.string, чтобы получить NSString имущество каждого NSMutableAttributedString, которое вы предоставили.

Ваше второе предупреждение связано с тем, что вышеуказанный метод возвращает NSString, а не NSMutableAttributedString, который вы объявили как таковой.

+0

Хорошо, спасибо. Я нашел подсказку здесь, где «stringByReplacing ... с параметрами и диапазоном использовался с атрибутами script. Я искал другое решение. – Christian

+0

Возможно, вы искали метод replaceCharactersInRange: withAttributedString', как указано в ссылке« NSMutableArributedString »?Используйте документы, и вам не придется догадываться, какие методы доступны. – Frankie

0

Ok, из-за быстрые подсказки я изменил его, как следует (с хорошим описанием здесь так):

- (NSMutableAttributedString *)attributedSubTitleString:(NSString *)string; 
{ 
NSMutableAttributedString *attString = [[NSMutableAttributedString alloc] initWithString:string]; 
UIFont *smallFont = [UIFont boldSystemFontOfSize:9.0f]; 

[attString beginEditing]; 
[attString addAttribute:NSFontAttributeName value:(smallFont) range:[string rangeOfString:@"th"]]; 
[attString addAttribute:NSFontAttributeName value:(smallFont) range:[string rangeOfString:@"th" options:NSBackwardsSearch]]; 
[attString addAttribute:(NSString*)kCTSuperscriptAttributeName value:@"1" range:[string rangeOfString:@"th"]]; 
[attString addAttribute:(NSString*)kCTSuperscriptAttributeName value:@"1" range:[string rangeOfString:@"th" options:NSBackwardsSearch]]; 

[attString addAttribute:NSFontAttributeName value:(smallFont) range:[string rangeOfString:@"st"]]; 
[attString addAttribute:NSFontAttributeName value:(smallFont) range:[string rangeOfString:@"st" options:NSBackwardsSearch]]; 
[attString addAttribute:(NSString*)kCTSuperscriptAttributeName value:@"1" range:[string rangeOfString:@"st"]]; 
[attString addAttribute:(NSString*)kCTSuperscriptAttributeName value:@"1" range:[string rangeOfString:@"st" options:NSBackwardsSearch]]; 

[attString addAttribute:NSFontAttributeName value:(smallFont) range:[string rangeOfString:@"nd"]]; 
[attString addAttribute:NSFontAttributeName value:(smallFont) range:[string rangeOfString:@"nd" options:NSBackwardsSearch]]; 
[attString addAttribute:(NSString*)kCTSuperscriptAttributeName value:@"1" range:[string rangeOfString:@"nd"]]; 
[attString addAttribute:(NSString*)kCTSuperscriptAttributeName value:@"1" range:[string rangeOfString:@"nd" options:NSBackwardsSearch]]; 

[attString addAttribute:NSFontAttributeName value:(smallFont) range:[string rangeOfString:@"rd"]]; 
[attString addAttribute:NSFontAttributeName value:(smallFont) range:[string rangeOfString:@"rd" options:NSBackwardsSearch]]; 
[attString addAttribute:(NSString*)kCTSuperscriptAttributeName value:@"1" range:[string rangeOfString:@"rd"]]; 
[attString addAttribute:(NSString*)kCTSuperscriptAttributeName value:@"1" range:[string rangeOfString:@"rd" options:NSBackwardsSearch]]; 

[attString endEditing]; 
return attString; 
} 

и в cellForRowAtIndexPath:

NSString *basicString = dieMenueDaten.SubtitelE; 

basicString = [basicString stringByReplacingOccurrencesOfString:@"<sup>" withString:@""]; 
basicString = [basicString stringByReplacingOccurrencesOfString:@"</sup>" withString:@""]; 

NSMutableAttributedString *newSubtitleE = [[NSMutableAttributedString alloc] initWithString:basicString]; 

newSubtitleE = [self attributedSubTitleString:basicString]; 
.... 
     cell.MenueTitel.text = dieMenueDaten.TitelE; 
     cell.MenueSubtitel.attributedText = newSubtitleE; 

Работы идеально подходят для меня.