Переменные в отдельном классе возвращаются с нулевым значением - PullRequest
4 голосов
/ 28 апреля 2011

Хорошо, я думаю, что вопрос, который у меня возник здесь, был многословным, и мне было трудно его решить. Я упрощу свой вопрос:

  • У меня есть класс с именем InController .
  • InController имеет метод с именем nextPage, который сообщает переменной int inPageNumber, что нужно добавить одну в себя и вызвать другой InController метод с именем updateTable.
  • updateTable очищает таблицу, inTable , от ее текущих данных и заполняет ее данными, относящимися к номеру страницы, которую он извлекает из inPageNumber.
  • Таблица inTable содержится внутри NSBox со специальными требованиями к печати. ​​
  • Я разделил NSBox на класс CustomViewPagination , чтобы удовлетворить эти требования к печати, переопределяя методы разбиения на страницы. По сути, когда требуется новая страница для печати, он пытается снова напечатать ту же область, но вызывает nextPage, чтобы заполнить таблицу данными последовательной страницы.

Со мной так далеко?

Один из методов разбиения на страницы, которые я переопределил в CustomViewPagination , beginPageInRect, автоматически вызывается для каждой распечатанной страницы по умолчанию. Из-за этого я вызвал мой InController метод nextPage, чтобы изменить данные inTable для текущей страницы печати. ​​

Моя проблема - когда я вызываю nextPage (это метод в InController ) из моего CustomViewPagination класса. Он ничего не делает, и когда я отлаживаю его, я обнаруживаю, что все переменные, необходимые в методе, равны нулю. Тем не менее, они являются правильными значениями, когда я вызываю nextPage изнутри InController .


Выдержки из файла:

InController.h:

#import <Cocoa/Cocoa.h>
#import "CustomViewPagination.h"

@interface InController : NSObject {
    IBOutlet NSWindow *inPreview;
    IBOutlet CustomViewPagination *inSheet;
    NSArray *iSelectedIn;
    NSMutableArray *records;
    int inPageNumber;
}
@property (nonatomic, retain) NSArray *iSelectedIn;
@property (nonatomic, retain) NSMutableArray *records;

InController.m:

#import "InController.h"

@implementation InController

@synthesize iSelectedIn, records;

- (IBAction) inNextPage:(id)sender {
    inPageNumber = inPageNumber + 1;
    NSLog(@"inPageNumber called ok");
    [self updateIn];
}


- (IBAction)updateInvoice:(id)sender {
    //wipe all current records and refresh empty table
    [records removeAllObjects];
    [inPreviewTable reloadData];
    for (NSArray *s in [[iSelectedIn valueForKey:@"inJobList"] lastObject]) {
        NSString *jLT = [s valueForKey:@"inJT"];
        NSString *jLH = [s valueForKey:@"inJHo"];
        NSString *jLC = [s valueForKey:@"inJC"];
        // etc.
        // if CustomViewPagination called this, records is nil, so nothing
        // is cleared, and there's no *s for iSelectedIn as iSelectedIn
        // is found to be nil. If InController called this, it works fine.

CustomViewPagination.h:

#import <Cocoa/Cocoa.h>

@class InController;

@interface CustomViewPagination : NSBox {
    InController *inControllerInstance;
}

@end

CustomViewPagination.m:

#import "CustomViewPagination.h"
#import "InController.h"

@implementation CustomViewPagination

- (void) awakeFromNib {
    inControllerInstance = [[InController alloc] init];
}

- (void)beginPageInRect:(NSRect)aRect atPlacement:(NSPoint)location {
    int pageCounter = [[NSPrintOperation currentOperation] currentPage];
    if (pageCounter == 1) {
        // Don't respond to 1st page, do nothing.
    } else {
        [inControllerInstance inNextPage:self];
    }
    [super beginPageInRect:aRect atPlacement:location];
}

@end

1 Ответ

0 голосов
/ 01 мая 2011

Вы используете 2 IBOutlets в InController (inPreview & inSheet), но InController создается программно в CustomViewPagination's awakeFromNib.

Как подключены розетки?(Не может быть внутри IB, так как вы создаете экземпляр InController программно).Это было бы объяснением, почему оба nil.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...