【问题标题】:Failed to connect (view) outlet from (NSApplication) to (NSView)无法从(NSApplication)连接(查看)出口到(NSView)
【发布时间】:2018-10-12 07:23:25
【问题描述】:

我正在开发 Xcode 10.0 - macOS 10.14 (Mojave)。我正在为我的学校项目做一个应用程序,该应用程序显示电影列表以及他们的海报和评级明星。每当我尝试启动我的应用程序时,都会遇到错误:

[默认] 无法加载 Info.plist 异常(eGPUOverrides)

但这似乎是系统的问题(正如我在 Apple 论坛上看到的那样)......第二个错误:

无法从 (NSApplication) 连接 (查看) 出口到 (NSView):缺少 setter 或实例变量

这些错误是否有某种联系?我正在查看 .xib 文件,试图将 Main.storyboard 设置为主界面,但我有空视图...使用 .xib 文件我什么都没有 - 应用程序启动,但只显示这两个错误。代码如下:

MasterViewController.m

#import "MasterViewController.h"
#import "NSObject+IntengineMovieData.h"
#import "NSObject+IntengineMovieDoc.h"

@interface MasterViewController ()

@end

@implementation MasterViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do view setup here.
}

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
    NSTableCellView *cellView = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self];

    if([tableColumn.identifier isEqualToString:@"MoviesColumn"]) {
        IntengineMovieDoc *movieDoc = [self.movies objectAtIndex:row];
        cellView.imageView.image = movieDoc.thumbImage;
        cellView.textField.stringValue = movieDoc.data.title;
        return cellView;
    }
    return cellView;
}

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
    return [self.movies count];
}

@end

AppDelegate.m

#import "AppDelegate.h"
#import "NSObject+IntengineMovieDoc.h"
#include "MasterViewController.h"

@interface AppDelegate ()
@property (nonatomic, strong) IBOutlet MasterViewController *masterViewController;
@property (assign) IBOutlet NSWindow *window;
@end

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    self.masterViewController = [[MasterViewController alloc]
                                 initWithNibName:@"MasterViewController" bundle:nil];

    IntengineMovieDoc *movie1 = [[IntengineMovieDoc alloc] initWithTitle:@"The Godfather" rating:5 thumbImage:[NSImage imageNamed:@"TheGodfatherThumb.jpg"] fullImage:[NSImage imageNamed:@"TheGodfather.jpg"]];

    IntengineMovieDoc *movie2 = [[IntengineMovieDoc alloc] initWithTitle:@"Tree of Life" rating:4 thumbImage:[NSImage imageNamed:@"TreeOfLifeThumb.jpg"] fullImage:[NSImage imageNamed:@"TreeOfLife.jpg"]];

    IntengineMovieDoc *movie3 = [[IntengineMovieDoc alloc] initWithTitle:@"Taxi Driver" rating:5 thumbImage:[NSImage imageNamed:@"TaxiDriverThumb.jpg"] fullImage:[NSImage imageNamed:@"TaxiDriver.jpg"]];

    NSMutableArray *movies = [NSMutableArray arrayWithObjects: movie1, movie2, movie3, nil];
    self.masterViewController.movies = movies;

    [self.window.contentView addSubview:self.masterViewController.view];
    self.masterViewController.view.frame = ((NSView*)self.window.contentView).bounds;
}

- (void)applicationWillTerminate:(NSNotification *)aNotification {
    // Insert code here to tear down your application
}
@end

编辑 1:好的,看来我在视图面板的Referencing Outlets 中有一个额外的插座。我没有添加,但删除此链接后,应用程序也不会显示。现在它只显示这个错误:

[默认] 无法加载 Info.plist 异常(eGPUOverrides)

【问题讨论】:

    标签: objective-c xcode macos


    【解决方案1】:

    没有必要为您的视图控制器创建一个IBOutlet,因为无论如何您都在您的applicationDidFinishLaunching 中实例化一个新实例。

    此外,您应该将您的masterViewController 设置为您窗口的rootViewController,如下所示:

    self.window.rootViewController = self.masterViewController;
    [self.window makeKeyAndVisible];
    

    您可能需要先创建一个新窗口:

    self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
    

    【讨论】:

    • 和以前一样 - 没有显示。我必须将 UIWindow 替换为 NSWindow,因为它不是 iOS,但仍然没有发生任何事情。
    • 该死!我误以为是iOS。道歉。
    • 没问题。检查我的编辑,我解决了一个问题,但应用程序尚未显示...
    猜你喜欢
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    相关资源
    最近更新 更多