Swift - 将字符串从 VC1 传递到 VC2 - 崩溃
Posted
技术标签:
【中文标题】Swift - 将字符串从 VC1 传递到 VC2 - 崩溃【英文标题】:Swift - Passing a string from VC1 to VC2 - Crash 【发布时间】:2014-07-11 08:12:21 【问题描述】:我有一个 swift 应用程序,我只是想将字符串从一个 ViewController 传递到另一个。在segue之后,我看到第二个viewController在第一个之上,数据通过了,我得到了以下异常:
2014-07-11 10:58:17.078 Flipper[8967:377257] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_TtC7Flipper19FirstViewController textField:]: unrecognized selector sent to instance 0x7fba2351eda0'
*** First throw call stack:
(
0 CoreFoundation 0x000000010c805055 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x000000010e528a1c objc_exception_throw + 45
2 CoreFoundation 0x000000010c80bf1d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
3 CoreFoundation 0x000000010c764dbc ___forwarding___ + 988
4 CoreFoundation 0x000000010c764958 _CF_forwarding_prep_0 + 120
5 UIKit 0x000000010d2ed196 -[UIApplication sendAction:to:from:forEvent:] + 75
6 UIKit 0x000000010d3f1c80 -[UIControl _sendActionsForEvents:withEvent:] + 467
7 UIKit 0x000000010d9fbb86 -[UITextField _resignFirstResponder] + 256
8 UIKit 0x000000010d45cbff -[UIResponder resignFirstResponder] + 117
9 UIKit 0x000000010d9fb98f -[UITextField resignFirstResponder] + 114
10 UIKit 0x000000010d355722 -[UIView(Hierarchy) _removeFirstResponderFromSubtree] + 161
11 UIKit 0x000000010d355bdd __UIViewWillBeRemovedFromSuperview + 76
12 UIKit 0x000000010d35594c -[UIView(Hierarchy) removeFromSuperview] + 91
13 UIKit 0x000000010d3ef12c __71-[UIPresentationController _initViewHierarchyForPresentationSuperview:]_block_invoke478 + 785
14 UIKit 0x000000010d3eb7bd -[UIPresentationController transitionDidFinish:] + 87
15 UIKit 0x000000010d3edd8e __56-[UIPresentationController runTransitionForCurrentState]_block_invoke_2 + 133
16 UIKit 0x000000010da1d123 -[_UIViewControllerTransitionContext completeTransition:] + 110
17 UIKit 0x000000010d3e8ea3 -[UITransitionView _didCompleteTransition:] + 1120
18 UIKit 0x000000010d34542a -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 209
19 UIKit 0x000000010d345760 -[UIViewAnimationState animationDidStop:finished:] + 76
20 QuartzCore 0x000000010d176f9e _ZN2CA5Layer23run_animation_callbacksEPv + 308
21 libdispatch.dylib 0x000000010ea64d64 _dispatch_client_callout + 8
22 libdispatch.dylib 0x000000010ea50f82 _dispatch_main_queue_callback_4CF + 941
23 CoreFoundation 0x000000010c76dae9 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9
24 CoreFoundation 0x000000010c73046b __CFRunLoopRun + 2043
25 CoreFoundation 0x000000010c72fa06 CFRunLoopRunSpecific + 470
26 GraphicsServices 0x00000001103b9abf GSEventRunModal + 161
27 UIKit 0x000000010d2ebcf8 UIApplicationMain + 1282
28 Flipper 0x000000010c37737d top_level_code + 77
29 Flipper 0x000000010c3773ba main + 42
30 libdyld.dylib 0x000000010ea99145 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
我的 VC1 代码是:
class FirstViewController: UIViewController
@IBOutlet var textField: UITextField
var myVariable:String!
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!)
if (segue.identifier == "P1ToP2")
var svc = segue!.destinationViewController as SecondViewController;
myVariable = textField.text
svc.myVariable = myVariable
我的 VC2 代码是:
class SecondViewController: UIViewController
@IBOutlet var labelTwo: UILabel
var myVariable:String!
override func viewDidLoad()
super.viewDidLoad()
labelTwo.text = myVariable
我正在使用一个故事板,其中 VC1 有一个按钮,它调用称为 P1ToP2 的显示(推送)segue
任何想法我做错了什么?谢谢
【问题讨论】:
这就是VC2的全部代码吗? 是的。这当然是一个测试应用......只是学习。 你让我思考。 VC2 中没有额外的代码,但故事板中列出了一个 IBAction。删除解决了问题..所以谢谢.. +1 【参考方案1】:正如您的崩溃所说:
reason: '-[_TtC7Flipper19FirstViewController textField:]: unrecognized selector sent to instance
而且您还没有提到单击按钮时会发生崩溃。
我的猜测是尝试删除textField:
和UITextField
之间的空格。
我猜问题出在那儿,而不是传递字符串。
【讨论】:
你怎么知道点击按钮导致了崩溃? 我不是在说,我是在证明他没有提到这一点。 您好,感谢您的回答。不幸的是,它不能解决问题。至于单击按钮,之后,正如我所说,我看到了第二个 VC - 它覆盖在第一个上。然后发生崩溃.. +1 尝试:) 这绝对与使用textField有关。如果我在两个 VC 中删除对它的引用,则不会再次发生崩溃。 @DavidDelMonte 如果 label.text 也产生相同的错误,您应该尝试使用一次标签。那么它必须是 textField.text 中的内容。以上是关于Swift - 将字符串从 VC1 传递到 VC2 - 崩溃的主要内容,如果未能解决你的问题,请参考以下文章
从 Swift 中的“UserDefaults”更新值的问题