Хорошо, я думаю, что вопрос, который у меня возник здесь, был многословным, и мне было трудно его решить. Я упрощу свой вопрос:
- У меня есть класс с именем 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