草庐IT

ios - 在 Swift 中通过 Storyboard Segue 传递自定义初始化参数

coder 2023-09-07 原文

我对自定义初始化程序的概念有些陌生,所以我很难理解我尝试做的事情是否可行。

我正在使用源代码创建消息应用程序。所有代码都是在不使用 Storyboard的情况下编写的,我现在想实现它。

在源代码中实现的 init 是这样的:

init(chat: Chat) {
    self.chat = chat
    super.init(nibName: nil, bundle: nil)
    title = chat.user.name
}

required init(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

didSelectRowAtIndexPath 方法中,原始代码以这种方式传递自定义初始化参数:

 let chat = chats[indexPath.row]
    let chatViewController = MessagesViewController(chat: chat)
    navigationController?.pushViewController(chatViewController, animated: true)

我尝试做的是简单地创建一个 Storyboard UIViewController,将类设置为原始代码,即将 Storyboard ViewController 设置为:MessagesViewController,然后执行 segue。像这样:

if segue.identifier == "ToMessages" {
        var messagesViewController: MessagesViewController = segue.destinationViewController as MessagesViewController
        let chat = chats[indexPath.row]
        messagesViewController.chat = chat
    }

然后 performSegueWithIdentifier("ToMessages", sender: self)

当我这样做时,我得到了这个 fatal error :fatal error: init(coder:) has not been implemented:

根据我对原始源代码的研究和理解,原因是我没有初始化chat参数。我意识到我可能不在正确的轨道上,如果是的话,我将不胜感激。

如果我对发生的事情是正确的,那么我的具体问题是如何在 prepareForSegue 方法中实现参数,例如:

var destinationVC = segue.destinationViewController as MessagesViewController(chat: chat)

最佳答案

问题不是因为您没有初始化聊天参数,而是因为您没有在 initWithCoder 中调用 super。这是为 Storyboard中的 View 调用的方法,因此您只需设置聊天属性而不是使用自定义初始化程序,就像您在上一个代码片段中显示的那样。由于您没有在 int 方法中执行任何操作,因此您可以将它们全部删除。如果出于其他目的需要将它们放在那里,则只需从 initWithCoder 中删除“ fatal error ”行,并将其替换为对 super 的调用。

关于ios - 在 Swift 中通过 Storyboard Segue 传递自定义初始化参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29375753/

有关ios - 在 Swift 中通过 Storyboard Segue 传递自定义初始化参数的更多相关文章

  1. ruby-on-rails - 未初始化的常量 Psych::Syck (NameError) - 2

    在我的gem中,我需要yaml并且在我的本地计算机上运行良好。但是在将我的gem推送到ruby​​gems.org之后,当我尝试使用我的gem时,我收到一条错误消息=>"uninitializedconstantPsych::Syck(NameError)"谁能帮我解决这个问题?附言RubyVersion=>ruby1.9.2,GemVersion=>1.6.2,Bundlerversion=>1.0.15 最佳答案 经过几个小时的研究,我发现=>“YAML使用未维护的Syck库,而Psych使用现代的LibYAML”因此,为了解决

  2. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  3. ruby-on-rails - 未在 Ruby 中初始化的对象 - 2

    我在Rails工作并有以下类(class):classPlayer当我运行时bundleexecrailsconsole然后尝试:a=Player.new("me",5.0,"UCLA")我回来了:=>#我不知道为什么Player对象不会在这里初始化。关于可能导致此问题的操作/解释的任何建议?谢谢,马里奥格 最佳答案 havenoideawhythePlayerobjectwouldn'tbeinitializedhere它没有初始化很简单,因为你还没有初始化它!您已经覆盖了ActiveRecord::Base初始化方法,但您没有调

  4. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  5. ruby-on-rails - ActionController::RoutingError: 未初始化常量 Api::V1::ApiController - 2

    我有用于控制用户任务的Rails5API项目,我有以下错误,但并非总是针对相同的Controller和路由。ActionController::RoutingError:uninitializedconstantApi::V1::ApiController我向您描述了一些我的项目,以更详细地解释错误。应用结构路线scopemodule:'api'donamespace:v1do#=>Loginroutesscopemodule:'login'domatch'login',to:'sessions#login',as:'login',via::postend#=>Teamroutessc

  6. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  7. ruby - 这两个 Ruby 类初始化定义有什么区别? - 2

    我正在阅读一本关于Ruby的书,作者在编写类初始化定义时使用的形式与他在本书前几节中使用的形式略有不同。它看起来像这样:classTicketattr_accessor:venue,:datedefinitialize(venue,date)self.venue=venueself.date=dateendend在本书的前几节中,它的定义如下:classTicketattr_accessor:venue,:datedefinitialize(venue,date)@venue=venue@date=dateendend在第一个示例中使用setter方法与在第二个示例中使用实例变量之间是

  8. ruby - rails 3 redirect_to 将参数传递给命名路由 - 2

    我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use

  9. ruby-on-rails - 如何生成传递一些自定义参数的 `link_to` URL? - 2

    我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些

  10. ruby-on-rails - 如何在 Rails 3 中创建自定义脚手架生成器? - 2

    有这些railscast。http://railscasts.com/episodes/218-making-generators-in-rails-3有了这个,你就会知道如何创建样式表和脚手架生成器。http://railscasts.com/episodes/216-generators-in-rails-3通过这个,您可以了解如何添加一些文件来修改脚手架View。我想把两者结合起来。我想创建一个生成器,它也可以创建脚手架View。有点像RyanBates漂亮的生成器或web_app_themegem(https://github.com/pilu/web-app-theme)。我

随机推荐