मेरे पास एक प्रोजेक्ट है जो उद्देश्य सी में है, मेरे दृश्य नियंत्रक को छोड़कर, जो स्विफ्ट में है।लोड किया गया निब लेकिन दृश्य आउटलेट सेट नहीं किया गया था - स्विफ्ट संस्करण
जब मैंने इसे चलाने के लिए, मैं न आया हुआ अपवाद 'NSInternalInconsistencyException', कारण की वजह से त्रुटि
समाप्त एप्लिकेशन प्राप्त करें: '- [UIViewController _loadViewFromNibNamed: बंडल:] "..." निब भरी हुई लेकिन दृश्य आउटलेट सेट नहीं किया गया था। '
तो मैंने अपनी निब फ़ाइल खोल दी, "फ़ाइल के मालिक" को देखो, और मुझे लगता है कि दृश्य बिल्कुल आउटलेट के रूप में भी दिखाई नहीं देता है।
मेरे पुराने दृश्य नियंत्रक (उद्देश्य सी) के लिए, व्यू आउटलेट दिखाया गया है।
मेरी स्विफ्ट दृश्य नियंत्रक में, मैं इसे एक @IBOutlet होने के लिए मजबूर करने के लिए UIViewController से "दृश्य" चर अधिभावी की कोशिश की है, लेकिन इसके बारे में प्रकार 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
}
}
मैं क्या करने की जरूरत है लेना प्रदर्शित करने के लिए मेरा विचार?
धन्यवाद।
(हाँ, यह Loaded nib but the view outlet was not set - new to InterfaceBuilder लिए एक समान प्रश्न है, लेकिन दृश्य आउटलेट दिखाई नहीं देता।)
मैंने ऐसा किया है। मैंने दृश्य के सभी जोड़ों को वापस कर दिया है और मेरे कोड में इसका कोई संदर्भ नहीं है। हालांकि, जब मैं "फ़ाइल का मालिक" ऑब्जेक्ट चुनता हूं और कनेक्शन इंस्पेक्टर खोलता हूं, तो वहां कोई "दृश्य" संपत्ति नहीं होती है। http://i.pictr.com/4v475ryo0i.png – cowlinator
इसके अलावा, मुझे यह इंगित करना चाहिए कि मुझे अपने व्यू कंट्रोलर को उद्देश्य-सी का उपयोग करके प्रारंभ करने की आवश्यकता है, न कि तेजी से, इसलिए मैं वास्तव में इसे इस तरह शुरू कर रहा हूं: [[viewControllerPtr initWithNibName: @ "MyViewControllerSwift" बंडल: शून्य] autorelease]; जहां viewControllerPtr एक सही आवंटित आईडी है। – cowlinator
देखो कि आप क्या कर सकते हैं। स्क्रैच से दृश्य बनाएं, इसके साथ कुछ भी न करें। बस फ़ाइल के मालिक पर क्लिक करें, नियंत्रक असाइन करें, और फिर दृश्य खींचें। यह 100% काम करना चाहिए। – user3677173