CocoaDev

Edit AllPages

How do you get the text selected in an General/NSTextView, and put it into an General/NSString?


If you look at the documentation for General/NSTextView, you will find:

which returns the range of the selected text. Drilling up to the first superclass, General/NSText, you will find:

which returns the text as an General/NSString. Looking at the documentation for General/NSString, you will find:

which returns a string from a substring of text. Putting it all together yields:

General/NSString *substring = General/textView string] substringWithRange:[textView selectedRange;


Right after posting this discussion, I tried doing it just like that, but the substring always has a length of 0.


Perhaps nothing is selected.


I have had thousands of characters selected at once, and still nothing.


Works fine for me. Maybe your textView pointer isn’t pointing to what you think it is? – Bo


Newbie development task - this is an ideal candidate for a category: make a category on General/NSString with a method -(General/NSString *)selectedText which does the above. - John


Hmmm … replacing one line of code with a one-line category kinda sounds like code-bloat to me . See also General/CategoriesAreBad, General/CategoriesAreGood.

As for the problem described above, break in the debugger and query the variables by hand. Does everything match your expectations? I.e., is textView non-nil? Is textView a text view, or is it something else? Do other method calls work? etc. etc.

– General/MikeTrent


Well, if the category stays at one line, I agree, but I was thinking in the context of eventually populating the category with other ‘left out’ methods that make life easier. - John


Original Poster

I spent hours in the debugger, all the other methods work, only the one block of code that I need doesn’t work.


Doesn’t work “how”?


The length of the string is still 0, there is no text in the string.


Make a test project containing the bare minimum necessary for this to work (a window, a controller object and a General/NSTextView in this case) Add a button to the window that executes the above code and General/NSLogs the resulting string. This should help you figure out what’s going wrong.