Hello,I am freshman in here..and my english is not good, sorry . I want to encoding and decoding my custom view..But, I can't ,I had waste several month about it...Anybody can help me?thank you very much..Below is my code..
In my custom view: I define a custom view such as:
And I want to save the custom view in MyDocument class, and I design the UI include button ,when I press button ,it can add custom view to display in window. So, In my mydocument class code:
----------
In MyDocument class:
In my custom view: I define a custom view such as:
Code:
@class MyDocument;
@interface StretchView : NSView
{
NSPoint points[NUM];
NSPoint q[NUM];
NSMutableArray *rectArray;
NSPoint p1,p2,p3,p4;
NSInteger selectedSegment;
NSPoint location;
CGPoint _point1;
CGPoint _controlPoint1;
CGPoint _point2;
CGPoint _controlPoint2;
NSAffineTransform *transform;
float control;
float step;
float control2;
float step2;
IBOutlet MyDocument *document;
//draw Text:
NSTextStorage *textStorage;
NSLayoutManager *layoutManager;
NSTextContainer *textContainer;
IBOutlet NSTextField *myTextField;
@public
NSBezierPath *newPath;
NSImage *image;
}
And I want to save the custom view in MyDocument class, and I design the UI include button ,when I press button ,it can add custom view to display in window. So, In my mydocument class code:
----------
In MyDocument class:
Code:
- (id)init
{
self = [super init];
if (self) {
squiggleArray=[[NSMutableArray alloc] init];
}
return self;
}
- (NSString *)windowNibName
{
return @"MyDocument";
}
- (void)windowControllerDidLoadNib:(NSWindowController *)aController
{
[super windowControllerDidLoadNib:aController];
[stretchView setNsImageObj:image];
}
-(void)makeWindowControllers
{
MyWindowController *windowController = [[MyWindowController alloc] init];
[self addWindowController:windowController];
[windowController release];
}
-(NSArray *)squiggles
{
return [NSArray arrayWithArray:squiggleArray];
}
- (void)addSquiggle:(Squiggle *)squiggle
{
[[[self undoManager] prepareWithInvocationTarget:self] removeSquiggle:squiggle];
[squiggleArray addObject:squiggle];
[stretchView setNeedsDisplay:YES];
}
- (void)removeSquiggle:(Squiggle *)squiggle
{
[[[self undoManager] prepareWithInvocationTarget:self] addSquiggle:squiggle];
[squiggleArray removeObject:squiggle];
[stretchView setNeedsDisplay:YES];
}
- (void)startNewSquiggleWithPoint:(NSPoint)point
{
Squiggle *squiggle = [[Squiggle alloc] init];
[squiggle addPoint:point];
[self addSquiggle:squiggle];
}
- (Squiggle *)currentSquiggle
{
return [squiggleArray lastObject];
}
-(IBAction)pressBtn:(id)sender
{
myViewController = [[MyViewController alloc] initWithNibName:@"MyDocument" bundle:nil];
zFrame1 = [myViewController.view frame];
[myViewController.view setFrame:zFrame1];
[myViewController.view setFrameOrigin:nsPointViewOrigin];
press = [nsMutableView count];
[nsWindowController.window.contentView addSubview:myViewController.view];
[nsMutableView addObject:myViewController];
}
- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
{
NSMutableDictionary *documentDictionary = [NSMutableDictionary dictionary];
[documentDictionary setObject:[NSKeyedArchiver archivedDataWithRootObject:squiggleArray] forKey:@"squiggles"];
[documentDictionary setObject:[NSKeyedArchiver archivedDataWithRootObject:stretchView.nsImageObj] forKey:@"nsImageObj"];
StretchView *newView = [[StretchView alloc] init];
[documentDictionary setObject:[NSKeyedArchiver archivedDataWithRootObject:newView] forKey:@"newView"];
return [NSPropertyListSerialization dataFromPropertyList:documentDictionary format:NSPropertyListBinaryFormat_v1_0 errorDescription:NULL];
}
- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError
{
NSDictionary *properties = [NSPropertyListSerialization propertyListFromData:data mutabilityOption:NSPropertyListImmutable format:NULL errorDescription:NULL];
[squiggleArray setArray:[NSKeyedUnarchiver unarchiveObjectWithData:[properties objectForKey:@"squiggles"]]];
image = (NSImage *)[NSKeyedUnarchiver unarchiveObjectWithData:[properties objectForKey:@"nsImageObj"]];
return YES;
}
Last edited by a moderator: