Why does [NSTextStorage setAttributedString] crash with NSMutableAttributedString?

匿名 (未验证) 提交于 2019-12-03 02:18:01

问题:

When I run the following Code it crashes at the last line. I don't have any idea why. This function gets called in awakeFromNib.

- (void)setMotdText:(NSString *)text {     NSString *boldFontName = [[NSFont boldSystemFontOfSize:12] fontName];     NSMutableAttributedString *attrstr = [[NSMutableAttributedString alloc] initWithString:text];      [attrstr beginEditing];      [attrstr addAttribute:NSFontAttributeName value:boldFontName range:NSMakeRange(0, 16)];      [attrstr endEditing];      [self.motdTextView.textStorage setAttributedString:attrstr]; } 

I get this crash log:

2012-06-22 11:32:22.348 MSM-Plan[20785:403] -[__NSCFConstantString _isDefaultFace]: unrecognized selector sent to instance 0x7fff79b9f380 2012-06-22 11:32:22.349 MSM-Plan[20785:403] An uncaught exception was raised 2012-06-22 11:32:22.349 MSM-Plan[20785:403] -[__NSCFConstantString _isDefaultFace]: unrecognized selector sent to instance 0x7fff79b9f380 2012-06-22 11:32:22.351 MSM-Plan[20785:403] (     0   CoreFoundation                      0x00007fff8a5bef56 __exceptionPreprocess + 198     1   libobjc.A.dylib                     0x00007fff8ae19d5e objc_exception_throw + 43     2   CoreFoundation                      0x00007fff8a64b1be -[NSObject doesNotRecognizeSelector:] + 190     3   CoreFoundation                      0x00007fff8a5abe23 ___forwarding___ + 371     4   CoreFoundation                      0x00007fff8a5abc38 _CF_forwarding_prep_0 + 232     5   AppKit                              0x00007fff8e0b060c -[NSMutableAttributedString(NSMutableAttributedStringKitAdditions) fixFontAttributeInRange:] + 1249     6   AppKit                              0x00007fff8e0afeb7 -[NSMutableAttributedString(NSMutableAttributedStringKitAdditions) fixAttributesInRange:] + 64     7   AppKit                              0x00007fff8e19b521 -[NSTextStorage processEditing] + 107     8   AppKit                              0x00007fff8e0c2564 -[NSTextStorage edited:range:changeInLength:] + 385     9   Foundation                          0x00007fff8d6f4497 -[NSConcreteMutableAttributedString replaceCharactersInRange:withAttributedString:] + 328     10  AppKit                              0x00007fff8e1dfd19 -[NSConcreteTextStorage replaceCharactersInRange:withAttributedString:] + 81     11  MSM-Plan                            0x000000010206af5a -[MSM_PlanAppDelegate setMotdText:] + 314     12  MSM-Plan                            0x000000010206c455 -[MSM_PlanAppDelegate awakeFromNib] + 1701     13  CoreFoundation                      0x00007fff8a5b5fb1 -[NSObject performSelector:] + 49     14  CoreFoundation                      0x00007fff8a5b5f32 -[NSSet makeObjectsPerformSelector:] + 274     15  AppKit                              0x00007fff8e0369ff -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] + 1245     16  AppKit                              0x00007fff8e02cf73 loadNib + 322     17  AppKit                              0x00007fff8e02c470 +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] + 217     18  AppKit                              0x00007fff8e02c38b +[NSBundle(NSNibLoading) loadNibFile:externalNameTable:withZone:] + 141     19  AppKit                              0x00007fff8e02c2ce +[NSBundle(NSNibLoading) loadNibNamed:owner:] + 364     20  AppKit                              0x00007fff8e29d06f NSApplicationMain + 398     21  MSM-Plan                            0x000000010206adf2 main + 34     22  MSM-Plan                            0x000000010206adc4 start + 52 ) 2012-06-22 11:32:22.416 MSM-Plan[20785:403] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFConstantString _isDefaultFace]: unrecognized selector sent to instance 0x7fff79b9f380' *** First throw call stack: (     0   CoreFoundation                      0x00007fff8a5bef56 __exceptionPreprocess + 198     1   libobjc.A.dylib                     0x00007fff8ae19d5e objc_exception_throw + 43     2   CoreFoundation                      0x00007fff8a64b1be -[NSObject doesNotRecognizeSelector:] + 190     3   CoreFoundation                      0x00007fff8a5abe23 ___forwarding___ + 371     4   CoreFoundation                      0x00007fff8a5abc38 _CF_forwarding_prep_0 + 232     5   AppKit                              0x00007fff8e0b060c -[NSMutableAttributedString(NSMutableAttributedStringKitAdditions) fixFontAttributeInRange:] + 1249     6   AppKit                              0x00007fff8e0afeb7 -[NSMutableAttributedString(NSMutableAttributedStringKitAdditions) fixAttributesInRange:] + 64     7   AppKit                              0x00007fff8e19b521 -[NSTextStorage processEditing] + 107     8   AppKit                              0x00007fff8e0c2564 -[NSTextStorage edited:range:changeInLength:] + 385     9   Foundation                          0x00007fff8d6f4497 -[NSConcreteMutableAttributedString replaceCharactersInRange:withAttributedString:] + 328     10  AppKit                              0x00007fff8e1dfd19 -[NSConcreteTextStorage replaceCharactersInRange:withAttributedString:] + 81     11  MSM-Plan                            0x000000010206af5a -[MSM_PlanAppDelegate setMotdText:] + 314     12  MSM-Plan                            0x000000010206c455 -[MSM_PlanAppDelegate awakeFromNib] + 1701     13  CoreFoundation                      0x00007fff8a5b5fb1 -[NSObject performSelector:] + 49     14  CoreFoundation                      0x00007fff8a5b5f32 -[NSSet makeObjectsPerformSelector:] + 274     15  AppKit                              0x00007fff8e0369ff -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] + 1245     16  AppKit                              0x00007fff8e02cf73 loadNib + 322     17  AppKit                              0x00007fff8e02c470 +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] + 217     18  AppKit                              0x00007fff8e02c38b +[NSBundle(NSNibLoading) loadNibFile:externalNameTable:withZone:] + 141     19  AppKit                              0x00007fff8e02c2ce +[NSBundle(NSNibLoading) loadNibNamed:owner:] + 364     20  AppKit                              0x00007fff8e29d06f NSApplicationMain + 398     21  MSM-Plan                            0x000000010206adf2 main + 34     22  MSM-Plan                            0x000000010206adc4 start + 52 ) terminate called throwing an exception(lldb) 

回答1:

I had to change the first line to:

    NSFont *boldFont = [NSFont boldSystemFontOfSize:12]; 

Now it works, because the value attribute requires a NSFont-Object and not a NSString with the fonts name.

This is the working Code:

- (void)setMotdText:(NSString *)text {     NSFont *boldFont = [NSFont boldSystemFontOfSize:12];     NSMutableAttributedString *attrstr = [[NSMutableAttributedString alloc] initWithString:text];      [attrstr beginEditing];      [attrstr addAttribute:NSFontAttributeName value:boldFont range:NSMakeRange(0, 16)];      [attrstr endEditing];      [self.motdTextView.textStorage setAttributedString:attrstr]; } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!