Poinçon chargé mais la prise de vue n'a pas été définie – Edition rapide

J'ai un projet qui est tout en Objective C, sauf pour mon controller de vue, qui est dans Swift.

Quand je l'exécute, j'obtiens l'erreur

Terminaison de l'application en raison d'une exception non interceptée 'NSInternalInconsistencyException', raison: '- [UIViewController _loadViewFromNibNamed: bundle:] a chargé la pointe "…", mais le sharepoint vue n'a pas été défini.'

J'ai donc ouvert mon file nib, regardez "Propriétaire du file", et je vois que la vue n'apparaît même pas comme une sortie du tout.
Pour mon ancien controller de vue (objective c), la prise de vue s'affiche.

Dans mon controller de vue Swift, j'ai essayé de surcharger la variable "view" de UIViewController afin de le forcer à être un @IBOutlet, mais il s'est plaint que la variable "view" soit de type UIView, se plaignait de UIView ?, et se plaignait de UIView !

Voici les versions simplifiées de

mon 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: Ssortingng?, bundle nibBundleOrNil: NSBundle?) { super.init(nibName:nibNameOrNil, bundle:nibBundleOrNil); } override func viewDidLoad() { super.viewDidLoad(); println("Using MyViewControllerSwift"); } deinit { //TODO } } 

Que dois-je faire pour que mon affichage s'affiche?

Merci.

(Oui, cette question est similaire à celle de Loaded nib, mais la prise de vue n'a pas été définie, ce qui est nouveau pour InterfaceBuilder, mais le sharepoint vue n'apparaît pas.)

  • Première – définir une class personnalisée dans votre file nib (propriétaire du file -> troisième icône -> class personnalisée: YourViewController)
  • Deuxième – la dernière icône dans le propriétaire du file -> lien (faites glisser) la propriété "vue" à la vue de l'interface

Init votre ViewController comme ceci:

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

Ça va marcher. Ne faites aucune manipulation avec View.

Si vous avez tout essayé et que vous avez toujours cette erreur, essayez de recréer le file de class à partir de zéro, mais n'oubliez pas de cocher la case "Créer aussi le file XIB". Cela va lier automatiquement quelques éléments qui ne sont pas liés lors de la création de ces files séparément. Une fois que cela est créé, vous pouvez probablement couper et coller tout sur le nouveau XIB et cela devrait fonctionner correctement.

Je trouve ce problème spécifiquement avec la création de files séparément dans Swift.

J'ai eu le même problème, ma deuxième vue sur mon controller de vue n'a pas pu charger. J'ai changé le nom de la vue dans la propriété (comme j'avais précédemment donné "View"). Votre controller de vues existant avait déjà des references à la vue sur le dessus avec le même nom (Voir). D'où l'erreur. Essayez de changer les noms des sockets. Cela a fonctionné parfaitement dans mon cas.