我有一个基于文档的应用程序。它应该是一个PDFViewer,用户从左表中选择一个PDF,然后将其加载到右侧的PDF视图中。
在我的Document类中,我创建了一个WindowController的实例,它是我的Document.xib的文件所有者,并使它成为这样的窗口控制器:
- (id)init
{
self = [super init];
if (self) {
controller = [[WindowController alloc] initWithWindowNibName:@"Document"]; }
return self;
}
-(void)makeWindowControllers {
[self addWindowController: controller];
}
My Window Controller然后创建一个控制我的NSTableView的TableViewController实例:
@implementation WindowController
-(id)initWithWindowNibName:(NSString *)window {
self = [super initWithWindowNibName:window];
return self;
}
-(void)windowDidLoad
{
tableViewController = [[TableViewController alloc] init];
}
@end
TableViewController有一个连接到我的NSTableView的插座。
然后,TableViewController通过拥有一个PDFViewerController实例来控制PDFViewer,这个实例是在它的init方法中分配&init和init。 PDFViewerController类还有一个连接到我的PDFView的插座。
PDFViewerController有这种加载PDF的方法:
-(void) loadFromPath: (NSString *) path{
NSLog(@"PDFController trying to load path %@", path);
PDFDocument *pdfDoc = [[PDFDocument alloc] initWithURL: [NSURL fileURLWithPath: path]];
[pdfView setDocument: pdfDoc];
}
当表视图选择发生变化时,它应该告诉来自PDFViewerController实例的loadFromPath:将PDF加载到视图中,如下所示:
-(void) tableViewSelectionDidChange:(NSNotification *)notification{
// If the user clicks another file in the list we should let everyone know the path
selectedPath = [[list objectAtIndex: [[notification object] selectedRow]] path];
NSLog(@"trying to load path %@", selectedPath);
[pdfViewerController loadFromPath: selectedPath];
}
然而,我的PDFViewer根本没有回应。我无法弄清楚为什么......我把一切都联系起来了。如果我告诉它在PDFViewerController的init方法中加载PDF,它的工作正常,对于TableViewController也是如此。我似乎无法调用实例方法?我在这里做错了什么?
答案 0 :(得分:0)
您没有展示pdfViewerController
//Instantiate pdfViewerController from xib / storyboard
PdfViewerController *pdfViewerController = [[PdfViewerController alloc] initWithNibName:@"PdfViewerController" bundle:nil];
//Present it modally
[self presentViewController:pdfViewerController animated:YES completion:nil];
如果您使用故事板:Use this url
希望应该做的事情!