加载的笔尖,但视图出口没有设置 – 斯威夫特版

我有一个项目,都在目标C中,除了我的视图控制器,这是在斯威夫特。

当我运行它,我得到错误

终止应用程序由于未捕获的exception'NSInternalInconsistencyException',原因:' – [UIViewController _loadViewFromNibNamed:bundle:]加载了“…”笔尖,但视图sockets没有设置。

所以我打开了我的笔尖文件,看看“文件的所有者”,我发现这个视图甚至没有显示出来。
对于我的旧视图控制器(目标c),视图sockets确实显示。

在我的Swift视图控制器,我试图覆盖UIViewController的“视图”variables,以强制它是一个@IBOutlet,但它抱怨UIViewtypes的“视图”variables,抱怨UIView?,并抱怨UIView !

这里是简化的版本

我的AppDelegate.h

#import <UIKit/UIKit.h> @class MyViewController; @class MyViewControllerSwift; @interface MSAppDelegate : UIResponder <UIApplicationDelegate> { } @property (strong, nonatomic) UIWindow *window; @property (strong, nonatomic) UIViewController *viewController; @end 

AppDelegate.m

 #import "MyAppDelegate.h" #import "MyViewController.h" #import "MySwift-Swift.h" #import <UIKit/UIKit.h> @implementation MyAppDelegate static BOOL USE_SWIFT_VIEW_CONTROLLER = YES; - (void)dealloc { [_window release]; [_viewController release]; [super dealloc]; } - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; // Override point for customization after application launch. id viewControllerPtr = nil; if(USE_SWIFT_VIEW_CONTROLLER) { viewControllerPtr = [MyViewControllerSwift alloc]; } else { viewControllerPtr = [MyViewController alloc]; } UIViewController* vController = nil; if(USE_SWIFT_VIEW_CONTROLLER) { vController = [[viewControllerPtr initWithNibName:@"MyViewControllerSwift" bundle:nil] autorelease]; } else { vController = [[viewControllerPtr initWithNibName:@"MyViewController" bundle:nil] autorelease]; } self.viewController = vController; self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; return YES; } 

ViewController.swift

 import Foundation import AVFoundation @objc class MyViewControllerSwift : UIKit.UIViewController { var player : AVFoundation.AVAudioPlayer?; @IBOutlet weak var myTextView : UITextView!; required init(coder aDecoder : NSCoder) { super.init(coder:aDecoder); } override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { super.init(nibName:nibNameOrNil, bundle:nibBundleOrNil); } override func viewDidLoad() { super.viewDidLoad(); println("Using MyViewControllerSwift"); } deinit { //TODO } } 

我需要做什么才能让我的视图显示?

谢谢。

(是的,这是一个类似的问题,以加载笔尖,但视图sockets没有设置 – 新的InterfaceBuilder,但视图sockets不显示。)

  • 首先 – 在你的nib文件中设置自定义类(文件所有者 – >第三个图标 – >自定义类:YourViewController)
  • 其次 – 文件所有者中的最后一个图标 – >将“视图”属性链接(拖动)到接口视图

像这样初始化你的ViewController:

 YourViewController(nibName: "YourViewName", bundle: nil) 

它会工作。 不要使用View进行任何操作。

如果你已经尝试了所有的东西,但仍然遇到这个错误,请尝试从头开始重新创build类文件,但请记得选中“同时创buildXIB文件”checkbox。 这将自动链接分别创build这些文件时没有链接的几个项目。 创build完成后,可能会将所有内容剪切并粘贴到新的XIB上,并且应该可以正常工作。

我发现这个问题具体与在Swift中分别创build文件。

我有同样的问题,我的视图控制器上的第二个视图无法加载。 我改变了属性中的视图的名称(正如我以前给“视图”)。 您现有的视图控制器已经具有相同的名称(视图)上的视图的引用。 因此,错误。 尝试更改sockets名称。 它在我的情况下是完美的。