我有一个使用核心数据的OSX应用程序。
我的应用程序中有3个.xb文件,这些文件是:

1. MainMenu.xib
2. MasterTableViewController.xib
3. DetailViewController.xib

启动时,应用程序显示一个视图,该视图具有nStabVIEW视图,其中有两条记录。
我命名那个视图MistabeVIEW控制器
我希望当用户双击行时,隐藏“master”视图并显示我的“detail”视图。我把它命名为DeaveVIEW控制器。
当双击“master”视图中nstableview中的行时,不会发生任何事情,“master”视图仍然可见。我想要的是“主”视图去分解,而“细节”视图来显示。
下面是我现在掌握的代码,下面是更多的解释:
应用委托.h
#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject <NSApplicationDelegate>

    @property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
    @property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
    @property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;


    @property (nonatomic,strong) NSViewController *mainAppViewController;
    @property (weak) IBOutlet NSView *mainAppView;
    - (void)changeViewController:(NSInteger)tag;

    @property (weak) IBOutlet NSTableView *websitesTableView;
    - (void)tableViewDoubleClick:(id)nid;

@end

应用委托.m
#import "AppDelegate.h"
#import "MasterTableViewController.h"
#import "DetailViewController.h"
@interface AppDelegate ()

    @property (weak) IBOutlet NSWindow *window;
    - (IBAction)saveAction:(id)sender;

@end

@implementation AppDelegate

    NSString *const masterTable = @"MasterTableViewController";
    NSString *const detail = @"DetailViewController";


    -(void)awakeFromNib {
        [_websitesTableView setTarget:self];
        [_websitesTableView setDoubleAction:@selector(tableViewDoubleClick:)];
    }

    - (void)tableViewDoubleClick:(id)nid {
        NSInteger rowNumber = [_websitesTableView clickedRow];
        NSTableColumn *column = [_websitesTableView tableColumnWithIdentifier:@"websiteUrl"];
        NSCell *cell = [column dataCellForRow:rowNumber];

        NSInteger tag = 2;
        [self changeViewController:tag];
    }

    - (void)changeViewController:(NSInteger)tag {

        [[_mainAppViewController view]removeFromSuperview];
        switch (tag) {
            case 1:
                self.mainAppViewController = [[MasterTableViewController alloc]initWithNibName:masterTable bundle:nil];
            break;

            case 2:
                self.mainAppViewController = [[DetailViewController alloc]initWithNibName:detail bundle:nil];
            break;

         }

    [_mainAppView addSubview:[_mainAppViewController view]];
    [[_mainAppViewController view] setFrame:[_mainAppView bounds]];
    [[_mainAppViewController view] setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];

    }


    - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
        // automatically run the master table view controller
        NSInteger tag = 1;
        [self changeViewController:tag];
    }

现在,你们中的一些人可能想知道,剩下的代码在哪里。我在appdelegage.m中为下面的核心数据修改了锅炉板代码,因为它没有改变。我使用绑定使我的NestLabVIEW工作并显示我的记录,所以MasterTableViewController .h和.m文件是空的,对于DealItVIEW控制器.h和.m文件也是如此。
重要注意事项-这里我不能理解的是:如果在Apple DealFixSimeDebug方法中更改了2中的标记,则详细视图显示正常,但是如果我将其切换回1,然后双击行,“主”视图(与NSTRAMLVIEW)仍然可见,并且什么也不会发生(视图不交换)。
有谁能帮我找出我的代码有什么问题吗?
你好,约翰

最佳答案

显然,在mastertableviewcontroller.xib文件中实例化了AppDelegate类的第二个实例。应该只有一个AppDelegate实例,这是mainmenu.xib中的实例。所以,它不应该在mastertableviewcontroller.xib中。
其中一个实例正在从表中接收双击操作方法,但另一个实例具有指向主窗口的出口。
您需要(ed)去掉第二个实例,并找到另一种方法从MasterTableViewController访问app delegate。

07-24 09:51
查看更多