• 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
Re: NSTextView scrolls to top on Save
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: NSTextView scrolls to top on Save


  • Subject: Re: NSTextView scrolls to top on Save
  • From: Andy Lee <email@hidden>
  • Date: Sun, 19 Dec 2010 16:20:29 -0500

On Dec 18, 2010, at 10:38 PM, Andy Lee wrote:
> 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?

Following up... I found Apple's equivalent of what I was doing: <http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/TextArchitecture/Tasks/TextEditor.html>.  It doesn't use bindings.  When I followed the instructions the resulting app worked fine.

However, it bugged me that it has an ivar that sometimes is a copy, possibly out of date, of the text view's contents.  It seemed like unnecessary duplication of data to me, so I tweaked the example to use an NSTextStorage for the ivar, which it then plugs into the text view.  The resulting document class has fewer lines of code, even with the missing dealloc that I added.  And it doesn't need to be the delegate of the text view, so even the nib is a teeny bit simpler.

I can understand why Apple wouldn't use a bindings-based solution for this example, since bindings is an advanced topic unto itself, but I think using an NSTextStorage would be appropriate given the context.  Unless someone spots a fatal flaw, I'll submit it as a doc suggestion.

Here's the code I ended up with.  I never did figure out why my bindings-based app scrolls to the top.

--Andy


//  MyDocument.h

#import <Cocoa/Cocoa.h>

@interface MyDocument : NSDocument
{
    NSTextStorage *mString;

    IBOutlet NSTextView *textView;
}

@end



//  MyDocument.m

#import "MyDocument.h"

@implementation MyDocument

- (id)init
{
    self = [super init];
    if (self)
    {
        mString = [[NSTextStorage alloc] init];
    }

    return self;
}

- (void)dealloc
{
    [mString release];

    [super dealloc];
}

- (NSString *)windowNibName
{
    return @"MyDocument";
}

- (void)windowControllerDidLoadNib:(NSWindowController *) aController
{
    [super windowControllerDidLoadNib:aController];

    if (mString)
    {
        [[textView layoutManager] replaceTextStorage:mString];
    }
}

- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
{
    [textView breakUndoCoalescing];

    return [mString dataFromRange:NSMakeRange(0, [mString length])
               documentAttributes:[NSDictionary dictionaryWithObject:NSRTFTextDocumentType
                                                              forKey:NSDocumentTypeDocumentAttribute]
                            error:outError];
}

- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError
{
    [mString release];
    mString = [[NSTextStorage alloc] initWithData:data
                                          options:nil
                               documentAttributes:NULL
                                            error:outError];

    return (mString != nil);
}

@end

_______________________________________________

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: Kyle Sluder <email@hidden>
References: 
 >NSTextView scrolls to top on Save (From: Andy Lee <email@hidden>)

  • Prev by Date: Re: NSToolbar help
  • Next by Date: Re: How can I "set tab stops" in a UITextView?
  • Previous by thread: NSTextView scrolls to top on Save
  • Next by thread: Re: NSTextView scrolls to top on Save
  • Index(es):
    • Date
    • Thread