• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
NSTextView scrolls to top on Save
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

NSTextView scrolls to top on Save


  • Subject: NSTextView scrolls to top on Save
  • From: Andy Lee <email@hidden>
  • Date: Sat, 18 Dec 2010 22:38:20 -0500

As a learning experience, I'm trying to make a trivial document-based app: a window with a text view that can edit and save RTF files.

What I have now almost works, except that whenever I save changes, the text view scrolls to the top.  Needless to say, this would be very annoying in a real text-editing app.  I suspect it's something trivial about document-based apps and/or bindings that I just don't understand.  Can someone explain what's going on?


--- The setup ---

I barely wrote ten lines of code.  I created a new document-based project and added this ivar to MyDocument.h:

    NSMutableAttributedString *myText;

(I see the document class in TextEdit uses an NSTextStorage.  But the docs say NSTextView can be bound to an attributed string, so I figured I should be able to use one.)

I wrote three methods, two of which the project template had stubbed out for me:

- (NSDictionary *)myDocumentAttributes
{
    return [NSDictionary dictionaryWithObject:NSRTFTextDocumentType
                                       forKey:NSDocumentTypeDocumentAttribute];
}

- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
{
    return [myText dataFromRange:NSMakeRange(0, [myText length])
              documentAttributes:[self myDocumentAttributes]
                           error:outError];
}

- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError
{
    [myText release];
    myText = [[NSMutableAttributedString alloc] initWithData:data
                                                     options:[self myDocumentAttributes]
                                          documentAttributes:nil
                                                       error:outError];
    return (myText != nil);
}

In IB, I put an NSTextView in the window and bound its Attributed String to the File's Owner with "myText" as the model key path.

In the Info.plist, I specified rtf as the document type.


--- The weirdness ---

I paste a longish amount of text into the text view and hit Command-S.  While the sheet for the save panel is sliding down, I can see the text view scroll to the top of the text.  Aside from this, saving and opening files seems to work.


--- Attempt to diagnose ---

I created a subview of NSTextView and put a breakpoint in scrollPoint:.  When I hit Save, I get the stack trace below.

* The point being passed to scrollPoint: is {0, 467} which doesn't seem to correspond to anything.  The scroll view's height is 599.
* Why is the text view being sent a setTextColor: message?

#0    0x100001b72 in -[MyTextView scrollPoint:] at MyTextView.m:16
#1    0x7fff81626fb3 in -[NSLayoutManager(NSPrivate) _resizeTextViewForTextContainer:]
#2    0x7fff81625758 in -[NSLayoutManager(NSPrivate) _recalculateUsageForTextContainerAtIndex:]
#3    0x7fff8162c099 in -[NSLayoutManager textStorage:edited:range:changeInLength:invalidatedRange:]
#4    0x7fff8162be59 in -[NSTextStorage _notifyEdited:range:changeInLength:invalidatedRange:]
#5    0x7fff81686f3c in -[NSTextStorage processEditing]
#6    0x7fff816879e3 in -[NSTextStorage endEditing]
#7    0x7fff86bde763 in -[NSMutableAttributedString removeAttribute:range:]
#8    0x7fff816a2315 in -[NSTextView setTextColor:]
#9    0x7fff81b15c33 in -[_NSTextPlugin showValue:inObject:]
#10    0x7fff816d8e38 in -[NSValueBinder discardEditing]
#11    0x7fff81adefe2 in -[NSValueBinder commitEditingWithDelegate:didCommitSelector:contextInfo:]
#12    0x7fff8184deb2 in -[NSDocument saveDocumentWithDelegate:didSaveSelector:contextInfo:]
#13    0x7fff81677e9a in -[NSApplication sendAction:to:from:]
#14    0x7fff8169c41e in -[NSMenuItem _corePerformAction]
#15    0x7fff8169c188 in -[NSCarbonMenuImpl performActionWithHighlightingForItemAtIndex:]
#16    0x7fff81681e09 in -[NSMenu performKeyEquivalent:]
#17    0x7fff81680bb1 in -[NSApplication _handleKeyEquivalent:]
#18    0x7fff81551645 in -[NSApplication sendEvent:]
#19    0x7fff814e84da in -[NSApplication run]
#20    0x7fff814e11a8 in NSApplicationMain
#21    0x100001b50 in main at main.m:13


--Andy

_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Follow-Ups:
    • Re: NSTextView scrolls to top on Save
      • From: Andy Lee <email@hidden>
  • Prev by Date: binding NSSearchField to an NSArrayController
  • Next by Date: How can I "set tab stops" in a UITextView?
  • Previous by thread: binding NSSearchField to an NSArrayController
  • Next by thread: Re: NSTextView scrolls to top on Save
  • Index(es):
    • Date
    • Thread