Ho un progetto che è tutto in Objective C, tranne che per il mio controller della vista, che è a Swift.pennino caricato, ma la presa di vista non è stato impostato - Swift edizione
quando l'eseguo, ottengo l'errore
terminazione app a causa di eccezione non identificata 'NSInternalInconsistencyException', la ragione: '- [UIViewController _loadViewFromNibNamed: bundle:] caricato il "..." pennino ma il punto di vista non era impostato ".
Così ho aperto il mio file di pennino, guardo "Proprietario del file", e vedo che la vista non si presenta nemmeno come uscita.
Per il mio vecchio controller di visualizzazione (obiettivo c), viene visualizzata la presa di visualizzazione.
Nel mio controller vista Swift, ho provato modificando la variabile "vista" dal UIViewController per forzarlo a essere un @IBOutlet, ma lamentato la "vista" essendo variabile di tipo UIView, lamentato UIView ?, e si è lamentato di UIView !.
Qui ci sono versioni semplificate di
mia 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
}
}
Di cosa ho bisogno di fare ottenere la mia vista da mostrare?
Grazie.
(Sì, questa è una domanda simile a Loaded nib but the view outlet was not set - new to InterfaceBuilder ma la presa di vista non si presenta.)
Ho fatto così. Ho ripristinato tutte le manipolazioni della vista e non ci sono riferimenti nel mio codice. Tuttavia, quando seleziono l'oggetto "File's Owner" e apro l'Inspector di Connections, non esiste alcuna proprietà "view". http://i.pictr.com/4v475ryo0i.png – cowlinator
Inoltre, vorrei sottolineare che ho bisogno di inizializzare il mio ViewController usando l'obiettivo-c, non veloce, quindi in realtà sto inizializzando in questo modo: [[viewControllerPtr initWithNibName: @ Bundle "MyViewControllerSwift": nil] autorelease]; dove viewControllerPtr è un ID assegnato correttamente. – cowlinator
Guarda cosa potresti fare. Crea una vista da zero, non fare nulla con essa. Basta fare clic sul proprietario del file, assegnare il controller e quindi trascinare la visualizzazione. Dovrebbe funzionare al 100%. – user3677173