我是一个非常深的泡菜。我意识到有很多关于我的错误的SO主题,并且我已经通过3-4页这些答案的Google搜索结果并尝试了所有解决方案。没有人工作过。
我尝试了什么:
问题:Iv从 ViewProjectViewController 转到 RecordModule 。然后我以编程方式向 ViewProjectViewController 的NavBar添加了一个条形按钮,因为该条形图是从上一个VC以编程方式创建的。
然后你可以选择' item3' ..这就是按钮,我点击运行带有performSegueWithIdentifier的函数。但是当我点击它时,我收到了这个错误:
2016-04-29 12:54:59.098 music[9298:1272742] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<music.ViewProjectViewController: 0x7bead670>) has no segue with identifier 'recMod''
*** First throw call stack:
(
0 CoreFoundation 0x00ac3494 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x02e9be02 objc_exception_throw + 50
2 UIKit 0x01b4971c -[UIViewController shouldPerformSegueWithIdentifier:sender:] + 0
3 music 0x00089ad8 _TFC5music25ViewProjectViewController13openRecModulefPs9AnyObject_T_ + 168
4 music 0x00089b4a _TToFC5music25ViewProjectViewController13openRecModulefPs9AnyObject_T_ + 58
5 libobjc.A.dylib 0x02eb00b5 -[NSObject performSelector:withObject:withObject:] + 84
6 UIKit 0x01977e38 -[UIApplication sendAction:to:from:forEvent:] + 118
7 UIKit 0x01e079da -[UIBarButtonItem(UIInternal) _sendAction:withEvent:] + 179
8 libobjc.A.dylib 0x02eb00b5 -[NSObject performSelector:withObject:withObject:] + 84
9 UIKit 0x01977e38 -[UIApplication sendAction:to:from:forEvent:] + 118
10 UIKit 0x01977db7 -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 64
11 UIKit 0x01b1bf3b -[UIControl sendAction:to:forEvent:] + 79
12 UIKit 0x01b1c2d4 -[UIControl _sendActionsForEvents:withEvent:] + 433
13 UIKit 0x01b1c483 -[UIControl _sendActionsForEvents:withEvent:] + 864
14 UIKit 0x01b1b2c1 -[UIControl touchesEnded:withEvent:] + 714
15 UIKit 0x019f852e -[UIWindow _sendTouchesForEvent:] + 1095
16 UIKit 0x019f95cc -[UIWindow sendEvent:] + 1159
17 UIKit 0x0199abe8 -[UIApplication sendEvent:] + 266
18 UIKit 0x0196f769 _UIApplicationHandleEventQueue + 7795
19 CoreFoundation 0x009d5e5f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
20 CoreFoundation 0x009cbaeb __CFRunLoopDoSources0 + 523
21 CoreFoundation 0x009caf08 __CFRunLoopRun + 1032
22 CoreFoundation 0x009ca846 CFRunLoopRunSpecific + 470
23 CoreFoundation 0x009ca65b CFRunLoopRunInMode + 123
24 GraphicsServices 0x05d4e664 GSEventRunModal + 192
25 GraphicsServices 0x05d4e4a1 GSEventRun + 104
26 UIKit 0x01975eb9 UIApplicationMain + 160
27 music 0x000a7391 main + 145
28 libdyld.dylib 0x040a1a25 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
继承我的代码(ViewController - Segue的起点)
class ViewProjectViewController: UITableViewController {
var selectedProj: Array<String> = []
var selectedKey: String = ""
var listItemsTwo = [ListItemTwo]()
let shareDataTwo = SharedDataTwo.sharedInstance
override func viewDidLoad() {
super.viewDidLoad()
// Setup Left UIBarButton Here
self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: UIImage(named: "BackBtn"), style: .Plain, target: self, action: #selector(ViewProjectViewController.backButtonPressed(_:)))
// Setup Right UIBarButton Here
var items : Array<UIBarButtonItem> = []
let item1 = UIBarButtonItem(image: UIImage(named: "SaveBtn"),style: UIBarButtonItemStyle.Plain, target: self, action: #selector(ViewProjectViewController.saveChanges))
let item2 = UIBarButtonItem(image: UIImage(named: "EditBtn"), style: .Plain, target: self, action: #selector(ViewProjectViewController.editProject))
// SEGUE BUTTON NOT WORKING //////////////////////
let item3 = UIBarButtonItem(title: "Record", style: .Plain, target: self, action: #selector(ViewProjectViewController.openRecModule))
item3.tintColor = UIColor.redColor()
items.append(item1)
items.append(item2)
items.append(item3)
self.navigationItem.setRightBarButtonItems(items, animated: true)
item1.setTitleTextAttributes([
NSFontAttributeName: UIFont(name: "Aldrich", size: 12.0)!],
forState: UIControlState.Normal)
继承了segue代码(ViewProjectViewController)
func openRecModule(sender: AnyObject) {
self.performSegueWithIdentifier("recMod", sender: nil)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let destinationVC = segue.destinationViewController as? RecordModule {
destinationVC.transitioningDelegate = self
}
}
Interface Builder图像 - http://i.imgur.com/klbwdrm.png
ViewProjectViewController如何在屏幕上显示
MainPanelViewController 将用户定向到 ViewProjectViewController 。
MainPanelViewController 是一个 UIViewController ,其中嵌入了 UITableView 。 UITableViewCell 的代码如下(也是 ViewProjectViewControlle r的代码)
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let keys = Array(sharedDataThree.c.keys)
let object = self.sharedDataThree.c[keys[indexPath.row]]
let newProgramVar = object as! NSArray
let destinationVC = ViewProjectViewController()
destinationVC.selectedProj = newProgramVar as! Array<String>
destinationVC.selectedKey = keys[indexPath.row]
//performSegueWithIdentifier("viewProject", sender: self)
var alreadyPushed = false
if let vc = self.navigationController?.viewControllers {
for viewController in vc {
if let viewController = viewController as? ViewProjectViewController {
self.navigationController?.popToViewController(viewController, animated: true)
print("Push your controller")
alreadyPushed = true
break
}
}
}
if alreadyPushed == false {
self.navigationController?.pushViewController(destinationVC, animated: true)
}
答案 0 :(得分:0)
试试这个:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "recMod" {
let destinationVC = segue.destinationViewController as? RecordModule
destinationVC.transitioningDelegate = self
}
}
答案 1 :(得分:0)
你的问题就在这一行:
let destinationVC = ViewProjectViewController()
您没有从故事板加载它。这个类中没有任何东西知道你也可以从故事板创建它,所以segues不在那里。
尝试类似:
let sb = UIStoryboard(name: "yoursbname", bundle: NSBundle.mainBundle())
let destinationVC = instantiateViewControllerWithIdentifier("YourVcID") as?