NSTextStorage longestEffectiveRange breaks after sequential edits

Can anyone please help me understand NSTextStorage attributes.

Let say we have an attributed bold text which looks like this:


bold{
    NSColor = "Generic RGB colorspace 1 1 1 1";
    NSFont = "\"OpenSans-Bold 16.00 pt. P [] (0x100cca530) fobj=0x100f2d710, spc=4.16\"";
    NSParagraphStyle = "Alignment 4, LineSpacing 0, ParagraphSpacing 8, ParagraphSpacingBefore 16, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 26/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n    28L,\n    56L,\n    84L,\n    112L,\n    140L,\n    168L,\n    196L,\n    224L,\n    252L,\n    280L,\n    308L,\n    336L\n), DefaultTabInterval 0, Blocks (\n), Lists (\n), BaseWritingDirection -1, HyphenationFactor 0, TighteningForTruncation YES, HeaderLevel 0 LineBreakStrategy 0";
}

After editing, it looks like this


bold{
    NSColor = "Generic RGB colorspace 1 1 1 1";
    NSFont = "\"OpenSans-Bold 16.00 pt. P [] (0x100cca530) fobj=0x100f2d710, spc=4.16\"";
    NSParagraphStyle = "Alignment 4, LineSpacing 0, ParagraphSpacing 8, ParagraphSpacingBefore 16, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 26/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n    28L,\n    56L,\n    84L,\n    112L,\n    140L,\n    168L,\n    196L,\n    224L,\n    252L,\n    280L,\n    308L,\n    336L\n), DefaultTabInterval 0, Blocks (\n), Lists (\n), BaseWritingDirection -1, HyphenationFactor 0, TighteningForTruncation YES, HeaderLevel 0 LineBreakStrategy 0";
}a{
    NSColor = "Generic RGB colorspace 1 1 1 1";
    NSFont = "\"OpenSans-Bold 16.00 pt. P [] (0x100cca530) fobj=0x100f2d710, spc=4.16\"";
    NSParagraphStyle = "Alignment 4, LineSpacing 0, ParagraphSpacing 8, ParagraphSpacingBefore 16, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 26/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n    28L,\n    56L,\n    84L,\n    112L,\n    140L,\n    168L,\n    196L,\n    224L,\n    252L,\n    280L,\n    308L,\n    336L\n), DefaultTabInterval 0, Blocks (\n), Lists (\n), BaseWritingDirection -1, HyphenationFactor 0, TighteningForTruncation YES, HeaderLevel 0 LineBreakStrategy 0";
}s{
    NSColor = "Generic RGB colorspace 1 1 1 1";
    NSFont = "\"OpenSans-Bold 16.00 pt. P [] (0x100cca530) fobj=0x100f2d710, spc=4.16\"";
    NSParagraphStyle = "Alignment 4, LineSpacing 0, ParagraphSpacing 8, ParagraphSpacingBefore 16, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 26/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n    28L,\n    56L,\n    84L,\n    112L,\n    140L,\n    168L,\n    196L,\n    224L,\n    252L,\n    280L,\n    308L,\n    336L\n), DefaultTabInterval 0, Blocks (\n), Lists (\n), BaseWritingDirection -1, HyphenationFactor 0, TighteningForTruncation YES, HeaderLevel 0 LineBreakStrategy 0";
}d{
    NSColor = "Generic RGB colorspace 1 1 1 1";
    NSFont = "\"OpenSans-Bold 16.00 pt. P [] (0x100cca530) fobj=0x100f2d710, spc=4.16\"";
    NSParagraphStyle = "Alignment 4, LineSpacing 0, ParagraphSpacing 8, ParagraphSpacingBefore 16, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 26/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n    28L,\n    56L,\n    84L,\n    112L,\n    140L,\n    168L,\n    196L,\n    224L,\n    252L,\n    280L,\n    308L,\n    336L\n), DefaultTabInterval 0, Blocks (\n), Lists (\n), BaseWritingDirection -1, HyphenationFactor 0, TighteningForTruncation YES, HeaderLevel 0 LineBreakStrategy 0";

If we now try to get longest effective range from the text store using

attributes(at:longestEffectiveRange:in:)
, we will only get the range of a "bold" part of a text.

Why is that and how can I fix this, since I need to know the actual longest range and not the range of the attribute run?

Replies

Could you provide a bit more context about the issue you're experiencing? The method attributes(at:effectiveRange:) should return a range of {0,7} for the string "boldasd".