视图控制器不会相互通信

时间:2014-09-18 05:43:09

标签: objective-c cocoa pdf quartz-2d

我有一个基于文档的应用程序。它应该是一个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也是如此。我似乎无法调用实例方法?我在这里做错了什么?

1 个答案:

答案 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

希望应该做的事情!