Загружен Сиб но вид розетки не было установлено - стремительный выпуск
У меня есть проект, который находится в Objective C, за исключением моего контроллера вида, который находится в Swift.
Когда я запускаю его, я получаю ошибку
Прекращение приложения из-за необработанных исключений 'NSInternalInconsistencyException', причина: '- [UIViewController _loadViewFromNibNamed: bundle:] загрузил "..."Сиб но вид розетки не было установлено.'
Итак, я открыл свой файл nib, посмотрел на "владельца файла", и я вижу, что вид даже не отображается как выход на все.
Для моего старого контроллера вида (objective c) выход вида действительно появляется.
В моем контроллере Swift view я попытался переопределить переменную" view "из UIViewController, чтобы заставить ее быть @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
}
}
Что мне нужно сделать, чтобы мое представление отображалось?
Спасибо.
(Да, это аналогичный вопрос кзагруженному наконечнику, но выход вида не был установлен - new Для InterfaceBuilder , но выход вида не отображается. )
3 ответа:
- Первый набор пользовательских классов в файле nib (Владелец файла - > третий значок - > пользовательский класс: YourViewController)
- Второй-последний значок в окне владельца файла - > связать (перетащить) свойство "вид" с видом интерфейса
Init ваш ViewController так:
YourViewController(nibName: "YourViewName", bundle: nil)
Это сработает. Не делайте никаких манипуляций с видом.
Если вы все перепробовали и все еще получаете эту ошибку, попробуйте заново создать файл класса с нуля, но не забудьте установить флажок "также создать файл XIB". Это автоматически свяжет несколько элементов, которые не связаны при создании этих файлов отдельно. После того, как это будет создано, вы, вероятно, можете вырезать и вставить все на новый XIB, и он должен работать нормально.
Я нахожу эту проблему особенно с созданием файлов отдельно в Swift.
У меня была та же проблема, мой 2-й вид на моем контроллере вида не мог загрузиться . Я изменил имя представления в свойстве (как я ранее дал "представление"). Ваш существующий контроллер вида уже имел ссылки на вид сверху с тем же именем(View). Отсюда и ошибка . Попробуйте изменить названия розеток . В моем случае это сработало идеально .