我有一个项目,除了我的视图控制器是用 Swift 编写的之外,全部都是用 Objective C 编写的。
当我运行它时,我收到错误
由于未捕获的异常而终止应用程序
'NSInternalInconsistencyException',原因:'-[UIViewController
_loadViewFromNibNamed:bundle:] 加载了“...”笔尖,但未设置视图出口。'
所以我打开我的 nib 文件,查看“文件所有者”,我发现该视图根本没有显示为出口。
对于我的旧视图控制器(目标 c),视图出口确实出现了。
在我的 Swift 视图控制器中,我尝试覆盖 UIViewController 中的“view”变量,以强制它成为 @IBOutlet,但它抱怨“view”变量是 UIView 类型,抱怨 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
}
}
我需要做什么才能显示我的视图?
Thanks.
(是的,这是一个类似的问题已加载笔尖但未设置视图出口 - InterfaceBuilder 的新功能 https://stackoverflow.com/questions/4763519/loaded-nib-but-the-view-outlet-was-not-set-new-to-interfacebuilder但视图出口不显示。 )