• 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: Communication between classes
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Communication between classes


  • Subject: Re: Communication between classes
  • From: email@hidden
  • Date: Fri, 28 Jun 2002 08:30:01 -0500

Jeremy..

Please read (and do!?!?) the first couple of recipes in the Vermont Recipe link on www.stepwise.com
Dr. Cheeseman (PhD in cool MVC technique!) has done a very good job on how to setup a VERY good paradigm for MVC using
multiple classes, passing data back and forth, undo stuff, I18N stuff, etc. etc.

Just the first two recipes (about 3-4 hours max) will teach you more on how to do the below (and other more
complex stuff) than almost any amount of reading / writing!

(And, soon to be released as a new book I hear! Congrats Bill! )

Cheers

-Steve

On Thursday, June 27, 2002, at 11:52 AM, Jeremy Dronfield wrote:

I've got a very basic (and to most people probably very dopy) question. I've built an application for browsing text files. I built a perfectly good prototype with everything in a single window and all the code in a single window controller. I now want to bring it into line with the MVC paradigm by having (initially) two windows (a controls window and a text viewing window), with data handling done separately (by an NSObject subclass). I've adapted my code accordingly, but I can't get the thing to work. I'm not getting any build errors, nor any runtime errors, nor does anything show up in debugging. The application just sits there, dead. I've inserted little monitoring features (text fields to display instance variable values, which return as 0 then die, and a progress indicator which doesn't respond on the first button click, then fills right up on the second), and the problem is with passing values back to the window controller subclass. Communication takes place, but the variables are somehow stripped of their values en route. I'm not at all confident that I'm initializing my classes properly. I've combed through the object class header files, the NSObject and application architecure documentation until my frontal lobes throb, and can't get anywhere in the morass of vague (often conflicting) guidance. My latest version includes an NSDocument subclass (which I'm not even sure I need), and goes like this (I've left out most of the accessors, since there doesn't seem to be any problem with them - also, there's nothing here about the display window, since I haven't even begun to implement it):

#import <Cocoa/Cocoa.h>

@class SRSettings;

@interface SRControls : NSWindowController
{
IBOutlet id backButton;
IBOutlet id markButton;
IBOutlet id nextButton;
IBOutlet id progressBar;
IBOutlet id display;
IBOutlet id display2;

SRSettings *sRSettings;
}

// Accessors
- (SRSettings *)sRSettings;

@end
-------------------------------------------------------
#import "SRControls.h"
#import "SRSettings.h"

@implementation SRControls

- (id)init
{
if (self = [super initWithWindowNibName:@"MainMenu.nib"]) {
[self setShouldCloseDocument:YES];
}
return self;
}

- (void)dealloc
{
[super dealloc];
}


- (SRSettings *)sRSettings {
return [[self document] sRSettings];
}

- (IBAction)backAction:(id)sender
{
[[self sRSettings] decSegmentCount];
[self displaySegmentCountValue];
}

- (IBAction)nextAction:(id)sender
{
[[self sRSettings] incSegmentCount];
[self displaySegmentCountValue];
}

- (void)displaySegmentCountValue
{
[display setIntValue:[[self sRSettings] segmentCount]];
[display2 setIntValue:[[self sRSettings] totalSegments]];
[[self sRSettings] calcProgress];
[progressBar setDoubleValue:[[self sRSettings] progress]];
}

@end
---------------------------------------------------------------
#import <Cocoa/Cocoa.h>

@class SRDocument;

@interface SRSettings : NSObject
{
SRDocument *sRDocument;

@public
NSMutableArray *bookmarks;
NSMutableArray *filesArray;

int segmentCount;
int totalSegments;
double progress;
}

- (id)initWithDocument:(SRDocument *)document;

- (SRDocument *)sRDocument;

@end
-----------------------------------------------------------------------
#import "SRSettings.h"
#import "SRDocument.h"

@implementation SRSettings

- (id)init
{
return [self initWithDocument:nil];
return self;
}

- (id)initWithDocument:(SRDocument *)document {
if (self = [super init]) {
sRDocument = document;

filesArray = [NSArray arrayWithObjects:@"ttlptt001", @"aa001", @"aa002", @"aa003", @"aa003a", @"aa004", @"aa005", @"aa006", @"aa007", @"aa008", @"aa009", @"aa010", nil];
totalSegments = [filesArray count];
[filesArray retain];
}
return self;
}

- (void)dealloc
{
[filesArray release];
[super dealloc];
}

- (SRDocument *)sRDocument {
return sRDocument;
}

- (NSArray *)filesArray {
return filesArray;
}

- (int)segmentCount {
return segmentCount;
}

- (int)totalSegments {
return totalSegments;
}

- (int)decSegmentCount
{
segmentCount--;
return segmentCount;
}

- (int)incSegmentCount
{
segmentCount ++;
return segmentCount;
}

- (double)calcProgress
{
double segCnt, ttlSeg;
segCnt = [self segmentCount];
ttlSeg = [self totalSegments];

progress = ((segCnt / ttlSeg) * 100);
return progress;
}

- (double)progress {
return progress;
}

@end
-------------------------------------------------------------------------
#import <Cocoa/Cocoa.h>

@class SRSettings;

@interface SRDocument : NSDocument
{
SRSettings *sRSettings;
}

- (SRSettings *)sRSettings;

@end
--------------------------------------------------------------------------
#import "SRDocument.h"
#import "SRSettings.h"
#import "SRControls.h"

@implementation SRDocument

- (id)init {

if (self = [super init]) {
sRSettings = [[SRSettings allocWithZone:[self zone]] initWithDocument:self];
}
return self;
}

- (void)dealloc {
[[self sRSettings] release];
[super dealloc];
}

- (SRSettings *)sRSettings {
return sRSettings;
}

- (void)makeWindowControllers {
SRControls *controller = [[SRControls allocWithZone:[self zone]] init];
[self addWindowController:controller];
[controller release];
}

@end

Can anyone point out (preferably in terms adapted for idiots) what I'm doing wrong? I feel like a moron asking for help with this, since it's such a fundamental part of Cocoa, but I'm desperate. Oh - incidental but crucial bit of information - this is NOT a doc-based app.
- Jeremy.
_______________________________________________
cocoa-dev mailing list | email@hidden
Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/cocoa-dev
Do not post admin requests to the list. They will be ignored.
_______________________________________________
cocoa-dev mailing list | email@hidden
Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/cocoa-dev
Do not post admin requests to the list. They will be ignored.

References: 
 >Communication between classes (From: Jeremy Dronfield <email@hidden>)

  • Prev by Date: Re: Recognizing standard about box
  • Next by Date: Re: Faster menu
  • Previous by thread: Communication between classes
  • Next by thread: Re: Communication between classes
  • Index(es):
    • Date
    • Thread