Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在视图控制器之间正确切换_Ios_Swift - Fatal编程技术网

Ios 如何在视图控制器之间正确切换

Ios 如何在视图控制器之间正确切换,ios,swift,Ios,Swift,我在尝试objective-c和Swift时遇到了这个问题。我创建了一个视图控制器(vc1),将其嵌入导航控制器,然后最终创建了一个新的视图控制器(vc2)。然后,我在vc1上放置一个按钮,并控制将其拖动到vc2。我运行应用程序,一切都很好,点击按钮将把新的视图控制器推到堆栈上,按下后退按钮将使我返回。但是,一旦我继续向vc2添加新按钮和文本字段,一旦我按下vc1上的原始按钮,应用程序将崩溃,引用应用程序代理文件的第一行作为断点。我尝试了很多方法,即尝试使用self.performsguewit

我在尝试objective-c和Swift时遇到了这个问题。我创建了一个视图控制器(vc1),将其嵌入导航控制器,然后最终创建了一个新的视图控制器(vc2)。然后,我在vc1上放置一个按钮,并控制将其拖动到vc2。我运行应用程序,一切都很好,点击按钮将把新的视图控制器推到堆栈上,按下后退按钮将使我返回。但是,一旦我继续向vc2添加新按钮和文本字段,一旦我按下vc1上的原始按钮,应用程序将崩溃,引用应用程序代理文件的第一行作为断点。我尝试了很多方法,即尝试使用self.performsguewithidentifier方法对segue进行编码,但它不起作用。我使用的是Xcode 6

storyboard.swift(vc1文件):

weightedAverage.swift(vc2)(为了摆脱崩溃,我已经对所有内容进行了注释,但没有运气):

appdelegate.swift:

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {

        return true
    }
}
下面是调试输出的内容(当我注释掉我的IBAction方法时):

2014-06-19 12:29:12.471等级计算[13217:580024]-[[u ttc9gradecalc10情节提要权重平均按钮按下:]:发送到实例0x10bb0ad30的无法识别的选择器 (lldb)

它还突出显示了从“类AppDelegate…”开始的应用程序委托行

当我取消注释包含performsgue的方法时。。。方法所有输出日志都显示
“lldb”并且它仍然突出显示了app delegate的行

您是否尝试过删除按钮的手动iAction代码,而只是使用故事板上的segue?如果同时使用故事板和类文件,则可能会同时尝试两次分段

编辑:我工作示例中两个视图控制器的所有代码

第一视图控制器:

class OneViewController: UIViewController {


@IBOutlet var label1: UILabel

@IBOutlet var label2: UILabel

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}
class TwoViewController: UIViewController {
@IBOutlet var upperlabel: UILabel
@IBOutlet var lowerlabel: UILabel
@IBOutlet var textbox: UITextField
@IBAction func button(sender: AnyObject) {
    var percent = textbox.text
    lowerlabel.text = percent
}
override func viewDidLoad() {
    super.viewDidLoad()
    }
第二视图控制器:

class OneViewController: UIViewController {


@IBOutlet var label1: UILabel

@IBOutlet var label2: UILabel

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}
class TwoViewController: UIViewController {
@IBOutlet var upperlabel: UILabel
@IBOutlet var lowerlabel: UILabel
@IBOutlet var textbox: UITextField
@IBAction func button(sender: AnyObject) {
    var percent = textbox.text
    lowerlabel.text = percent
}
override func viewDidLoad() {
    super.viewDidLoad()
    }

由于NDA,无法添加图像,但故事板只是NavigationController>VC1>VC2,每个VC中有两个标签,VC2中有一个文本框,每个VC中有一个按钮。只有第二个按钮在它的VC类中有一个动作。

所以…你有一个名为<代码>情节提要的视图控制器?是的,初始视图控制器名为情节提要要调试崩溃,请设置一个异常断点,请参见此处的操作方法:一旦完成此操作,您可以将异常粘贴到您的问题中,我们可以更好地帮助您。^我已编辑此帖子以包含调试输出,谢谢。序列图像板中名为:weightedAverage1的序列标识符是否在序列图像板中?如果它以相同的方式大写,并且视图控制器的类在序列图像板中设置为序列图像板,我想不出还有什么别的办法。抱歉,我帮不上什么忙。所以我重新创建了你的项目,但在按你的方式设置时也遇到了同样的错误。我不知道为什么,但按此顺序操作不会导致错误:创建视图和导航控制器,然后添加所有按钮和标签,然后将vc1上的按钮连接到vc2(在故事板上,无代码),然后将每个视图的类更改为自定义类,然后为标签/文本框添加插座。因此,我建议尝试重新创建视图,首先添加元素并确保它运行,连接它们,确保它运行,然后逐步完成这项工作假定这项工作可行,在连接所有视图之前,我是否必须在我的应用程序中创建我想要的每个视图?你可以尝试在情节提要的两个视图上重置默认类,然后重新制作按钮以在它们之间切换。以后您应该仍然能够添加到视图中,希望这不会影响您所创建的每个视图。但是Xcode 6几乎不可靠