NSMutableAttributedString崩溃的应用程序

时间:2014-08-16 02:40:59

标签: ios objective-c nsmutableattributedstring

我在设置此NSMutableAttributedString时对范围(我认为)做错了。谁能告诉我为什么这会让我的程序崩溃?它看起来对我来说,但我显然是错的!感谢。

NSString *placeHolderString = @"USERNAME";
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] init];
float spacing = 5.0f;

// crashes on this line
[attributedString addAttribute:NSKernAttributeName
                         value:@(spacing)
                         range:NSMakeRange(0, [placeHolderString length])];

self.userNameTextField.attributedPlaceholder = attributedString;

1 个答案:

答案 0 :(得分:2)

我认为导致您的问题的原因是您从未真正考虑过您的placeholderString。此外,您的value参数可以简单地使用numberWithFloat,因为应用程序随后会知道您正在使用的类型。

在您考虑placeHolderString之后,您将使用attributeString的长度,因为它现在只包含placeholderString的内容。然后,我们只需使用UITextField属性attributedText复制包含您的属性的字符串。

NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:placeHolderString];
float spacing = 5.0f;
[attributeString addAttribute:NSKernAttributeName
                        value:[NSNumber numberWithFloat:spacing]
                        range:(NSRange){0,[attributeString length]}];
userNameTextField.attributedText = [attributeString copy];

对于更多上下文,存在NSUnderlineStyleAttributeName等属性,您可以使用NSMutableAttributedString执行一些非常强大的操作。有关选项,请参阅文档。