Loaded Feder, aber der Ansichtsausgang wurde nicht eingestellt - Swift Edition
Ich habe ein Projekt, das sich ausschließlich in Objective C befindet, mit Ausnahme meines View Controllers, der sich in Swift befindet.
Wenn ich es laufen lasse, erhalte ich den Fehler
Terminating App aufgrund einer nicht erfassten Ausnahme 'NSInternalInconsistencyException', Grund: '- [UIViewController _loadViewFromNibNamed: bundle:] hat die Schreibfeder "..." geladen, aber der View-Ausgang wurde nicht festgelegt.'
So öffne ich meine NIB-Datei, schaue auf "File's Owner" und sehe, dass die Ansicht überhaupt nicht als Ausgang angezeigt wird.
Für meinen alten View-Controller (Ziel c) wird der View-Ausgang angezeigt.
In meinem Swift View Controller habe ich versucht, die "view" -Variable von UIViewController zu überschreiben, um sie als @IBOutlet zu erzwingen. Es wurde jedoch beanstandet, dass die "view" -Variable vom Typ UIView ist, UIView? UIView!.
Hier sind vereinfachte Versionen von
my 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
}
}
Was muss ich tun, damit meine Ansicht angezeigt wird?
Vielen Dank
(Ja, dies ist eine ähnliche Frage wieLoaded nib, aber der View-Ausgang wurde nicht festgelegt - neu in InterfaceBuilder aber der View Outlet wird nicht angezeigt. )