MKMapViewDelegate 命令因信号而失败:分段错误:11
Posted
技术标签:
【中文标题】MKMapViewDelegate 命令因信号而失败:分段错误:11【英文标题】:MKMapViewDelegate Command failed due to signal: Segmentation fault: 11 【发布时间】:2014-10-01 04:28:57 【问题描述】:我在实现此方法时遇到了一个非常奇怪的 MKMapViewDelegate 问题,给我一个我不理解的错误
只有当我删除整个函数时,错误才会消失,
我试图创建一个返回 nil 的空函数,但给了我同样的错误。
func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView!
if annotation.isKindOfClass(MKUserLocation.classForCoder())
return nil
let AnnotationIdentifier:NSString = "AnnotationIdentifier"
var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier(AnnotationIdentifier)
if annotationView != nil
return annotationView
else
var annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: AnnotationIdentifier)
annotationView.canShowCallout = true
annotationView.image = UIImage(named: "btn_fav.png")
return annotationView
错误: 由于信号导致命令失败:分段错误:11
CompileSwift normal arm64 /Users/Fortis/Proyectos/ios Apps/Abilia/Abilia iOS/Abilia/Abilia/Vistas/Proyecto/MapaViewController.swift
cd /Users/Fortis/Proyectos/IOS Apps/Abilia/Abilia iOS/Abilia
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -c "/Users/Fortis/Proyectos/IOS Apps/Abilia/Abilia iOS/Abilia/Abilia/Classes/NetClass/Downloader.swift" -primary-file "/Users/Fortis/Proyectos/IOS Apps/Abilia/Abilia iOS/Abilia/Abilia/Vistas/Proyecto/MapaViewController.swift" "/Users/Fortis/Proyectos/IOS Apps/Abilia/Abilia iOS/Abilia/Abilia/Vistas/Widget/ToggleView.swift" .
。 . .
0 swift 0x00000001019df028 llvm::sys::PrintStackTrace(__sFILE*) + 40
1 swift 0x00000001019df514 SignalHandler(int) + 452
2 libsystem_platform.dylib 0x00007fff9a2dc5aa _sigtramp + 26
3 libsystem_platform.dylib 000000000000000000 _sigtramp + 1708276336
4 swift 0x0000000100fe90ea swift::ClangImporter::Implementation::loadAllMembers(swift::Decl const*, unsigned long long, bool*) + 3130
5 swift 0x0000000101da2834 swift::IterableDeclContext::loadAllMembers() const + 100
6 swift 0x0000000101d995dc swift::NominalTypeDecl::getMembers(bool) const + 28
7 swift 0x0000000101dc029f swift::NominalTypeDecl::lookupDirect(swift::DeclName) + 79
8 swift 0x0000000101dbe96a swift::DeclContext::lookupQualified(swift::Type, swift::DeclName, unsigned int, swift::LazyResolver*, llvm::SmallVectorImpl<swift::ValueDecl*>&) const + 3146
9 swift 0x0000000100fe5941 (anonymous namespace)::SwiftDeclConverter::VisitObjCPropertyDecl(clang::ObjCPropertyDecl const*, swift::DeclContext*) + 161
10 swift 0x0000000100fe0d0d clang::declvisitor::Base<clang::declvisitor::make_const_ptr, (anonymous namespace)::SwiftDeclConverter, swift::Decl*>::Visit(clang::Decl const*) + 3117
11 swift 0x0000000100fe005b swift::ClangImporter::Implementation::importDeclImpl(clang::NamedDecl const*, bool&, bool&) + 331
12 swift 0x0000000100fe4912 swift::ClangImporter::Implementation::importDeclAndCacheImpl(clang::NamedDecl const*, bool) + 226
13 swift 0x0000000100fe879e swift::ClangImporter::Implementation::loadAllMembers(swift::Decl const*, unsigned long long, bool*) + 750
14 swift 0x0000000101da2834 swift::IterableDeclContext::loadAllMembers() const + 100
15 swift 0x0000000101d99a95 swift::ExtensionDecl::getMembers(bool) const + 21
16 swift 0x0000000101dc027d swift::NominalTypeDecl::lookupDirect(swift::DeclName) + 45
17 swift 0x0000000101dbe96a swift::DeclContext::lookupQualified(swift::Type, swift::DeclName, unsigned int, swift::LazyResolver*, llvm::SmallVectorImpl<swift::ValueDecl*>&) const + 3146
18 swift 0x0000000101cc6288 swift::TypeChecker::lookupMember(swift::Type, swift::DeclName, swift::DeclContext*, bool) + 200
19 swift 0x0000000101c34e2c swift::constraints::ConstraintSystem::lookupMember(swift::Type, swift::DeclName) + 220
20 swift 0x0000000101c6b32d swift::constraints::ConstraintSystem::simplifyMemberConstraint(swift::constraints::Constraint const&) + 2173
21 swift 0x0000000101c6dc88 swift::constraints::ConstraintSystem::simplifyConstraint(swift::constraints::Constraint const&) + 216
22 swift 0x0000000101c354bc swift::constraints::ConstraintSystem::addConstraint(swift::constraints::Constraint*, bool, bool) + 28
23 swift 0x0000000101c5a8a5 swift::ASTVisitor<(anonymous namespace)::ConstraintGenerator, swift::Type, void, void, void, void, void>::visit(swift::Expr*) + 9317
24 swift 0x0000000101c5c502 (anonymous namespace)::ConstraintWalker::walkToExprPost(swift::Expr*) + 162
25 swift 0x0000000101d6627f (anonymous namespace)::Traversal::visit(swift::Expr*) + 6431
26 swift 0x0000000101d62765 swift::Expr::walk(swift::ASTWalker&) + 53
27 swift 0x0000000101c583b0 swift::constraints::ConstraintSystem::generateConstraints(swift::Expr*) + 96
28 swift 0x0000000101c90ab6 swift::TypeChecker::typeCheckExpression(swift::Expr*&, swift::DeclContext*, swift::Type, swift::Type, bool, swift::FreeTypeVariableBinding, swift::ExprTypeCheckListener*) + 518
29 swift 0x0000000101cd73e3 swift::ASTVisitor<(anonymous namespace)::StmtChecker, void, swift::Stmt*, void, void, void, void>::visit(swift::Stmt*) + 291
30 swift 0x0000000101cd64c3 swift::TypeChecker::typeCheckFunctionBodyUntil(swift::FuncDecl*, swift::SourceLoc) + 371
31 swift 0x0000000101cd6b8f swift::TypeChecker::typeCheckAbstractFunctionBody(swift::AbstractFunctionDecl*) + 95
32 swift 0x0000000101c86b65 typeCheckFunctionsAndExternalDecls(swift::TypeChecker&) + 421
33 swift 0x0000000101c87476 swift::performTypeChecking(swift::SourceFile&, swift::TopLevelContext&, unsigned int) + 1734
34 swift 0x0000000100fc07dd swift::CompilerInstance::performSema() + 2253
35 swift 0x0000000100d54831 frontend_main(llvm::ArrayRef<char const*>, char const*, void*) + 1953
36 swift 0x0000000100d5294d main + 1677
37 libdyld.dylib 0x00007fff960e05fd start + 1
38 libdyld.dylib 0x0000000000000061 start + 1777465957
Stack dump:
0. Program arguments: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -c /Users/Fortis/Proyectos/IOS Apps/Abilia/Abilia iOS/Abilia/Abilia/Classes/NetClass/Downloader.swift -primary-file /Users/Fortis/Proyectos/IOS Apps/Abilia/Abilia iOS/Abilia/Abilia/Vistas/Proyecto/MapaViewController.swift /Users/Fortis/Proyectos/IOS Apps/Abilia/Abilia iOS/Abilia/Abilia/Vistas/Widget/ToggleView.swift /Users/Fortis/Proyectos/IOS Apps/Abilia/Abilia iOS/Abilia/Abilia/Classes/Entities/Mapa.swift /Users/Fortis/Proyectos/IOS Apps/Abilia/Abilia iOS/Abilia/Abilia/Classes/Entities/Edificio__c.swift .
。 . . . 1. 在 /Users/Fortis/Proyectos/IOS Apps/Abilia/Abilia iOS/Abilia/Abilia/Vistas/Proyecto/MapaViewController.swift:56:5 对“loadMapa”进行类型检查时 2. 在 [/Users/Fortis/Proyectos/IOS Apps/Abilia/Abilia iOS/Abilia/Abilia/Vistas/Proyecto/MapaViewController.swift:57:9 - line:57:29] RangeText="mapaView .delegate = s"
func loadMapa ()
mapaView.delegate = self
var theCoord = CLLocationCoordinate2DMake(0, 0)
if let coordenadasU = coordenadas
let coordArray:[NSString] = coordenadasU.componentsSeparatedByString(",") as [NSString]
if coordArray.count > 1
let lat: CLLocationDegrees = coordArray[0].doubleValue;
let long: CLLocationDegrees = coordArray[1].doubleValue;
theCoord = CLLocationCoordinate2DMake(lat, long)
pointAnnotation.coordinate = theCoord;
mapaView.addAnnotation(pointAnnotation)
let span = MKCoordinateSpan(latitudeDelta: 0.1, longitudeDelta: 0.1)
let region:MKCoordinateRegion = MKCoordinateRegion(center: theCoord, span: span)
mapaView.setRegion(region, animated: true)
mapaLoaded = true;
【问题讨论】:
我在 Xcode 6.0.1 GM 中遇到了完全相同的问题。相同的堆栈跟踪,当我分配MKMapView
的 delegate
属性时会发生这种情况。
也发生在 Xcode 6.1 GM 2 中。
嗯,我还是没有头绪,有没有其他的解决办法?问候
我最终在 Objective-C 中编写了包装器方法,并从 Swift 中调用它们。例如,+ (void)removeAllAnnotations:(MKMapView *)map;
,然后从 Swift 中调用它:MapWorkarounds.removeAllAnnotations(map: mapView)
这既编译又运行。
【参考方案1】:
这是 Swift 的许多错误之一,编译器会因为您的应用程序中的特定代码无法处理而突然崩溃。
您必须隔离有问题的部分(例如,通过注释掉屏幕的某些部分)并在再次编译后找到解决方法以使用不同的代码。
您的方法loadMapa
看起来如何?这是编译器提到的原因。
【讨论】:
感谢您的回答,我只是添加了路线图的代码。好的,我想这是一个错误,因为 a 正在使用 xcode beta7 并且在更新到它发生的最后一个版本时工作。 希望我现在能坚持使用 Objective-C。从一开始就很麻烦。 @AdamWaite 是的,需要一段时间(以及最新的 Xcode 6.1)才能适应它并再次恢复生产力。 6.1 修复了吗? @AdamWaite 至少情况有所改善。更少的崩溃。【参考方案2】:在继承 UIButton 并像这样覆盖选定的属性时,我遇到了同样的错误:
class ActionButton: UIButton
override var selected: Bool = true
didSet
updateBackgroundColor()
解决方案是从覆盖语句中删除“= true”:
class ActionButton: UIButton
override var selected: Bool
didSet
updateBackgroundColor()
我只是在猜测,但我会仔细检查您是否以正确的方式实现了您的委托方法...所有感叹号都正确给出...'!'在 MKAnnotationView 结束时!好像有点可疑。
【讨论】:
【参考方案3】:我已经搜索了为什么错误:“由于信号而导致命令失败:分段错误:11”导致我的应用出现问题...我的应用依赖于 Parse。我发现 Parse 对方法进行了更改:
query.findObjectsInBackgroundWithBlock( (objects : [AnyObject]?, error : NSError?) -> Void in
到
query.findObjectsInBackgroundWithBlock( (objects : [**PFObject**]?, error : NSError?) -> Void in
我已经改变了这一切,现在它可以工作了。希望这对使用 Parse 的人有所帮助。干杯
【讨论】:
【参考方案4】:并不是一个具体的答案,但我想添加另一个可能导致此错误的原因(因为它仍然很常见)。
我的程序有这样的代码:
if (myArray.count > 0) && (.Foo != myArray.last)
// Do something
在我的例子中,.Foo
属于一个枚举,我已经为其实现了Equatable
,但是,出于某种原因,Swift 编译器没有将我与myArray.last
的比较作为错误突出显示(与可选)并产生分段错误。
在我的情况下,修复只是使用myArray.last!
,因为myArray.count > 0
确保这将始终成功(必须至少是一个元素)。
像往常一样,一旦你知道错误是什么,请务必将其传递给bug report.apple.com
!
【讨论】:
以上是关于MKMapViewDelegate 命令因信号而失败:分段错误:11的主要内容,如果未能解决你的问题,请参考以下文章