我有一个Menu.xib,里面有5个UI按钮。我在ViewController中通过按钮IBAction调用此视图。当我尝试运行代码时,编译器会随机抛出:
分段故障:11
当我对我的代码或其中的随机部分进行注释时,比如:menuView.locationBtn.addTarget(self, action: #selector(HomeVC.goLocation), forControlEvents: .TouchUpInside)
,代码可能工作,也可能不工作。随机我有一段时间出现了这个错误,找不到问题所在。
@IBAction func menuBtn(sender: AnyObject) {
let menuView = (NSBundle.mainBundle().loadNibNamed("Menu", owner: self, options: nil).last) as! Menu
menuView.frame = CGRectMake(0, self.view.bounds.size.height, self.view.bounds.size.width, 100)
menuView.homeBtn.addTarget(self, action: #selector(HomeVC.goHome), forControlEvents: .TouchUpInside)
menuView.bookmarkBtn.addTarget(self, action: #selector(HomeVC.goBookmark), forControlEvents: .TouchUpInside)
menuView.locationBtn.addTarget(self, action: #selector(HomeVC.goLocation), forControlEvents: .TouchUpInside)
menuView.photoBtn.addTarget(self, action: #selector(HomeVC.goPhoto), forControlEvents: .TouchUpInside)
menuView.friendsBtn.addTarget(self, action: #selector(HomeVC.goFriends), forControlEvents: .TouchUpInside)
menuView.settingsBtn.addTarget(self, action: #selector(HomeVC.goSettings), forControlEvents: .TouchUpInside)
self.view.addSubview(menuView)
UIView.animateWithDuration(0.6, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.8, options: .CurveEaseInOut, animations: { () -> Void in
var newMenuFrame = menuView.frame
newMenuFrame.origin.y = self.view.bounds.size.height - 63
menuView.frame = newMenuFrame
self.view.layoutIfNeeded()
}) { (success) -> Void in
let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(HomeVC.hideOnTap(_:)))
gestureRecognizer.numberOfTapsRequired = 1
gestureRecognizer.delegate = self
gestureRecognizer.cancelsTouchesInView = false
self.view.addGestureRecognizer(gestureRecognizer)
}
}
func goHome() {
print("home")
}
func goBookmark() {
print("bookmark")
}
func goLocation() {
print("location")
}
func goPhoto() {
print("photo")
}
func goFriends() {
print("friends")
}
func goSettings() {
print("settings")
}
func hideOnTap(recognizer: UITapGestureRecognizer) {
self.view.viewWithTag(5)?.removeFromSuperview()
}
当我取消对整个代码的注释时,一切都很好。我在其他项目中经常做这样的事情,没有任何问题。。。非常感谢您的帮助。。。
编译器消息:
0 swift 0x000000010c3ea66b llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 43
1 swift 0x000000010c3e9956 llvm::sys::RunSignalHandlers() + 70
2 swift 0x000000010c3eaccf SignalHandler(int) + 287
3 libsystem_platform.dylib 0x00007fff932ba52a _sigtramp + 26
4 libsystem_platform.dylib 0x0000000000020000 _sigtramp + 1825987312
5 swift 0x000000010a5581a8 swift::ModuleFile::getType(llvm::Fixnum<31u, unsigned int>) + 872
6 swift 0x000000010a558f53 swift::ModuleFile::getType(llvm::Fixnum<31u, unsigned int>) + 4371
7 swift 0x000000010a558e44 swift::ModuleFile::getType(llvm::Fixnum<31u, unsigned int>) + 4100
8 swift 0x000000010a554d53 swift::ModuleFile::getDecl(llvm::Fixnum<31u, unsigned int>, llvm::Optional<swift::DeclContext*>) + 16259
9 swift 0x000000010a55793f swift::ModuleFile::maybeReadPattern() + 575
10 swift 0x000000010a557a92 swift::ModuleFile::maybeReadPattern() + 914
11 swift 0x000000010a55382e swift::ModuleFile::getDecl(llvm::Fixnum<31u, unsigned int>, llvm::Optional<swift::DeclContext*>) + 10846
12 swift 0x000000010a55baa9 swift::ModuleFile::readMembers(llvm::SmallVectorImpl<swift::Decl*>&) + 249
13 swift 0x000000010a55dfbe swift::ModuleFile::loadAllMembers(swift::Decl*, unsigned long long) + 206
14 swift 0x000000010a89d43c swift::NominalTypeDecl::getMembers(bool) const + 28
15 swift 0x000000010a83e3f7 (anonymous namespace)::Traversal::visitNominalTypeDecl(swift::NominalTypeDecl*) + 247
16 swift 0x000000010a83a266 (anonymous namespace)::Traversal::doIt(swift::Decl*) + 230
17 swift 0x000000010a83a16b swift::Decl::walk(swift::ASTWalker&) + 27
18 swift 0x000000010a3b13ab swift::ClassHierarchyAnalysis::init() + 155
19 swift 0x000000010a3a8ef1 swift::createClassHierarchyAnalysis(swift::SILModule*) + 129
20 swift 0x000000010a42108d swift::SILPassManager::SILPassManager(swift::SILModule*, llvm::StringRef) + 317
21 swift 0x000000010a4290c6 swift::runSILDiagnosticPasses(swift::SILModule&) + 118
22 swift 0x000000010a13d457 performCompile(swift::CompilerInstance&, swift::CompilerInvocation&, llvm::ArrayRef<char const*>, int&) + 12903
23 swift 0x000000010a13968d frontend_main(llvm::ArrayRef<char const*>, char const*, void*) + 2781
24 swift 0x000000010a1350ac main + 1932
25 libdyld.dylib 0x00007fff918085ad start + 1
26 libdyld.dylib 0x000000000000007a start + 1853848270
Stack dump:
bla bla unreadable crap
1. While loading members for 'HomeVC' at <invalid loc>
2. While deserializing decl #173 (PATTERN_BINDING_DECL)
3. While deserializing decl #10 (VAR_DECL)
我用"pod update"完全解决了这个问题。我会留下来,以防有人遇到同样的问题。
这让我想到了下一个问题。我的桥接头不再工作了。我不得不用CMD+ALT+SHIFT+K清理项目(用ALT清理非常重要,通常的清理没有效果!),然后再次运行pod安装。现在一切都恢复正常了。