【发布时间】:2014-09-18 05:43:09
【问题描述】:
我有一个基于文档的应用程序。它应该是一个 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];
}
然后我的窗口控制器创建一个控制我的 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 方法中被分配和初始化。 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];
}
当表格视图选择发生变化时,它应该告诉 loadFromPath: 从 PDFViewerController 实例将该 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 也是如此。看来我只是不能调用实例方法?我在这里做错了什么?
【问题讨论】:
-
这两个视图控制器链接在一个导航控制器中?您是否尝试过在 tableViewSelectionDidChange: 中重新实例化 PdfViewerController ?
-
不,它们没有在导航控制器中链接。他们需要吗?目前,我只是想在两者之间进行互动。我只是尝试重新实例化它,仍然没有运气。
-
我仍在试图弄清楚你在那里做什么。您以模态方式展示了 PdfViewerController?当你调用这行 [pdfViewerController loadFromPath: selectedPath]; 会发生什么?
-
当我拨打该线路时,绝对没有任何反应。我希望它将 selectedPath 发送到 loadFromPath 方法,该方法随后将该路径加载到我的 PDFView 中。我可以从 PDFViewController 类的 init 方法将 PDF 加载到 PDFView 中,但是当我从实例中加载时,似乎什么也没发生。
标签: objective-c cocoa pdf quartz-2d