标签: nsrange

使用NSRange的问题:索引越界

我正在尝试检测我的字符串中的网站URL,然后做一些归属字符串,如粗体等.

我的正则表达式定义为:

static NSRegularExpression *websiteRegularExpression;
static inline NSRegularExpression * WebsiteRegularExpression() {
    if (!websiteRegularExpression) {
        websiteRegularExpression = [[NSRegularExpression alloc] initWithPattern:@"\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[A-Z0-9+&@#/%=~_|]" 
                                                                        options:NSRegularExpressionCaseInsensitive 
                                                                          error:nil];
    }

    return websiteRegularExpression;
}
Run Code Online (Sandbox Code Playgroud)

这是我列举的地方:

 -(void)setBodyText
    {
        __block NSRegularExpression *regexp = nil;    
        bodyLabel.delegate = self;
        [self.bodyLabel setText:@"http://www.google.com" afterInheritingLabelAttributesAndConfiguringWithBlock:^NSAttributedString *(NSMutableAttributedString *mutableAttributedString) {

            NSRange stringRange = NSMakeRange(0, [mutableAttributedString length]);

            regexp = WebsiteRegularExpression ();
            NSRange nameRange = [regexp rangeOfFirstMatchInString:[mutableAttributedString string] options:0 range:stringRange];
            UIFont *boldSystemFont = [UIFont boldSystemFontOfSize:18.0]; 
            CTFontRef boldFont = CTFontCreateWithName((CFStringRef)boldSystemFont.fontName, boldSystemFont.pointSize, NULL);
            if (boldFont) {
                [mutableAttributedString addAttribute:(NSString *)kCTFontAttributeName value:(id)boldFont range:nameRange];
                CFRelease(boldFont); …
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch nsstring nsrange

3
推荐指数
1
解决办法
7768
查看次数

是否可以在NSMakeRange中执行负位置?

是否可以在NSMakeRange中执行负位置?

NSString *string = @"abc";
NSString *myString = [string substringWithRange:NSMakeRange(-1, 1)];
Run Code Online (Sandbox Code Playgroud)

ios nsrange

3
推荐指数
1
解决办法
1540
查看次数

搜索NSData末尾附近的字节时出现NSRangeException

我想检查我的应用程序中的最后2个字节的文件,以确保它们没有损坏的.jpg

rangeOfData:options:range:看起来是一个不错的选择,但我很难弄清楚如何获得一个合适的选择NSRange.我正在寻找的范围接近结尾NSData,直到结束.

这是我到目前为止:

NSData *imageData = [NSData dataWithContentsOfFile:filePath];
NSRange range = {([imageData length]-8),[imageData length]};
NSString *str = @"FFD9";
NSData *jpgTest = [str dataUsingEncoding:NSUTF8StringEncoding];
NSRange found = [imageData rangeOfData:jpgTest options:NSDataSearchBackwards range:range];
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

**由于未捕获的异常'NSRangeException'而终止应用程序,原因:'*** - [NSConcreteData rangeOfData:options:range:]:range {14954,14962} enxceeds data length 14962'

如何正确获取范围以搜索我的最后几个字节NSData

cocoa-touch objective-c ios nsrange

3
推荐指数
1
解决办法
2466
查看次数

如何在NSString中获取子字符串的NSRange?

NSString *str = @" My name is Mike, I live in California and I work in Texas. Weather in California is nice but in Texas is too hot...";
Run Code Online (Sandbox Code Playgroud)

我怎样才能遍历这个NSString并为每次出现的"California"获取NSRange,我想要NSRange,因为我想在NSAttributed字符串中更改它的颜色.

 NSRange range = NSMakeRange(0,  _stringLength);
 while(range.location != NSNotFound)
 {
    range = [[attString string] rangeOfString: @"California" options:0 range:range];


    if(range.location != NSNotFound)
    {

        range = NSMakeRange(range.location + range.length,  _stringLength - (range.location + range.length));


        [attString addAttribute:NSForegroundColorAttributeName value:_green range:range];
    }
}
Run Code Online (Sandbox Code Playgroud)

nsstring uitextview nsattributedstring ios nsrange

3
推荐指数
2
解决办法
3万
查看次数

从NSRegularExpression匹配中获取NSRange

我有一个包含NSRange元素的数组.

现在我可以使用数组的最后一个范围元素[resultArray lastObject].

当我访问最后一个元素时,它返回一些未知对象.(这意味着未知类)

现在我想将对象转换为NSRange.怎么做?

我的代码是:

NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:paraStartRegEx options:NSRegularExpressionCaseInsensitive error:&error];
NSArray *matches = [regex matchesInString:content options:0 range:NSMakeRange(0, [content length])];
NSObject *obj =  [matches lastObject];
Run Code Online (Sandbox Code Playgroud)

如何将此对象转换为NSRange

iphone objective-c ios nsrange

3
推荐指数
1
解决办法
451
查看次数

在UITextView中获取当前键入的单词

我想获取当前输入的单词UITextView.得到一个完全键入的单词的一种方式可以在这里找到的UITextView:获取最近字的UITextView类型,不过,我想这个词,当它被输入(不管它是类型化的,初,中,末UITextView) .

我想是什么定义被输入的单词是一个空白字符后跟字母数字字符,或者如果当前位置(以某种方式弄清楚range.location)是开始,UITextView则后续的任何后续应该也被视为单词.当另一个空白字符跟随时,将完成一个单词的输入.

我尝试过:

 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text`
Run Code Online (Sandbox Code Playgroud)

但我找到正确的范围有问题.

简而言之:我需要在a中找到子字符串UITextView,其中substring是当前键入的字.

编辑:因为问题出现了.我正在使用NSLayoutManager并绑定NSTextContainer到它,然后将其作为layoutManager传递给a NSTextStorage.

EDIT2:主要问题(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)textrange.location指标与指标不同,但总是少1.如果光标位于位置1,键入一个字母后,range.location将返回0.任何方法都可以吗?此外,text属性UITextView似乎也是1.当文本是foobar,我输出UITextView.text然后我得到了fooba.因此range.location+1返回异常Range {0, 1} out of bounds; string length 0'

编辑3:也许更容易得到我想要的结果NSTextStorage而不是UITextView

substring objective-c uitextview ios nsrange

3
推荐指数
1
解决办法
5888
查看次数

使用字符分隔符在Swift中查找和突出显示文本

我以前开发了一个Android应用程序,作为用户的参考指南.它使用sqlite数据库来存储信息.数据库存储没有格式化的UTF-8文本(即粗体或带下划线)

为了突出显示所需格式的文本部分,我使用delimiter标记特别为$$括起它们,因为这不会在数据库中显示为信息.在向用户显示文本之前,我编写了一个方法来查找这些分隔符并为其中包含的文本添加格式并删除分隔符.所以$$ foo $$变成了foo.

我的java代码如下:

private static CharSequence boldUnderlineText(CharSequence text, String token) {
    int tokenLen = token.length();
    int start = text.toString().indexOf(token) + tokenLen;
    int end = text.toString().indexOf(token, start);

    while (start > -1 && end > -1)
    {
        SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(text);
        //add the formatting required
        spannableStringBuilder.setSpan(new UnderlineSpan(), start, end, 0);
        spannableStringBuilder.setSpan(new StyleSpan(Typeface.BOLD), start, end, 0);

        // Delete the tokens before and after the span
        spannableStringBuilder.delete(end, end + tokenLen);
        spannableStringBuilder.delete(start - tokenLen, start);
        text = spannableStringBuilder;

        start = …
Run Code Online (Sandbox Code Playgroud)

regex string ios nsrange swift

3
推荐指数
1
解决办法
864
查看次数

如何使用NSRange

我正在使用带有属性字符串的NSRange,但我不完全理解文本的哪些部分将加粗,哪些不是.这是我试过的:

NSRange boldedRange = NSMakeRange(2, 4);
Run Code Online (Sandbox Code Playgroud)

2代表什么,4代表什么?

感谢任何为此帖做出贡献的人

xcode objective-c ios nsrange

3
推荐指数
1
解决办法
4412
查看次数

退格键和输入新字符后,NSRange `replaceCharactersInRange` 导致应用程序崩溃

我有一个文本字段,并使用shouldChangeCharactersInRange方法来获取值。

这是我的代码:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{

    NSLog(@"Pressing : %@\n", string);
    NSMutableString *text = [NSMutableString stringWithString:textField.text];

    NSLog(@"length: %lu", (unsigned long)range.length);
    NSLog(@"location: %lu\n", (unsigned long)range.location);
    NSLog(@"before text: %@", textField.text);

    [text replaceCharactersInRange:range withString:string];
    NSLog(@"After replacement , Text: %@\n\n", text);

    // My work..

    return YES;
}
Run Code Online (Sandbox Code Playgroud)

我首先将字符“T”添加到文本字段,它工作正常..

2016-03-02 10:06:23.162 MyTextFieldApp[12006:4323645] Pressing : T
2016-03-02 10:06:23.163 MyTextFieldApp[12006:4323645] length: 0
2016-03-02 10:06:23.163 MyTextFieldApp[12006:4323645] location: 0
2016-03-02 10:06:23.163 MyTextFieldApp[12006:4323645] before text: 
2016-03-02 10:06:23.163 MyTextFieldApp[12006:4323645] After replacement , Text: T
Run Code Online (Sandbox Code Playgroud)

然后,我退格它以删除字符,这也很好用。

2016-03-02 10:06:30.979 MyTextFieldApp[12006:4323645] …
Run Code Online (Sandbox Code Playgroud)

objective-c uitextfield ios nsrange

3
推荐指数
1
解决办法
3832
查看次数

Swift:NSAttributedString 和表情符号

我使用UITextView启用了文本属性编辑的 ,当文本中有表情符号时,我在获取属性时遇到问题。

这是我使用的代码:

var textAttributes = [(attributes: [NSAttributedString.Key: Any], range: NSRange)]()
let range = NSRange(location: 0, length: textView.attributedText.length)
textView.attributedText.enumerateAttributes(in: range) { dict, range, _ in
    textAttributes.append((attributes: dict, range: range))
}

for attribute in textAttributes {
    if let swiftRange = Range(attribute.range, in: textView.text) {
        print("NSRange \(attribute.range): \(textView.text![swiftRange])")
    } else {
        print("NSRange \(attribute.range): cannot convert to Swift range")
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用“示例文本 ??”之类的文本时,输出如下:

NSRange {0, 12}:示例文本

NSRange {12, 1}:无法转换为 Swift 范围

NSRange {13, 1}:无法转换为 Swift 范围

如您所见,我无法获取带有表情符号的文本。

文本属性由我NSTextStorage在文本视图上应用的自定义设置。这是setAttributes …

nsattributedstring ios emoji nsrange swift

2
推荐指数
1
解决办法
1183
查看次数