MKMapViewDelegate命令失败,因为收到信号:分段错误:11。

6
我在实现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行进行 'loadMapa' 的类型检查时 2. 在表达式 [/Users/Fortis/Proyectos/IOS Apps/Abilia/Abilia iOS/Abilia/Abilia/Vistas/Proyecto/MapaViewController.swift:57:9 - line:57:29] 处进行类型检查,文本范围为 "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 中遇到了完全相同的问题。堆栈跟踪相同,并且当我分配 MKMapViewdelegate 属性时发生了这种情况。 - Craig Otis
也发生在 Xcode 6.1 GM 2 中。 - Craig Otis
嗯,我仍然不知道,还有其他解决方案吗? 问候 - Hugo Fortis
我最终在Objective-C中编写了包装方法,并从Swift中调用它们。例如,+ (void)removeAllAnnotations:(MKMapView *)map;,然后从Swift中调用它:MapWorkarounds.removeAllAnnotations(map: mapView) 这样做既可以编译也可以运行。 - Craig Otis
4个回答

6

这是Swift的一个bug,当编译器无法处理你的特定应用程序代码时,它会突然崩溃。

你需要隔离出有问题的部分(例如通过注释掉屏幕的某些部分),一旦编译完成,找到解决方法使用不同的代码。

你的loadMapa方法长什么样?这是编译器提到的原因。


1
谢谢你的回答,我刚刚添加了路线图的代码。好的,我想这是一个错误,因为我之前使用的是Xcode beta7,在更新到最新版本后出现了问题。 - Hugo Fortis
现在我希望我当初坚持使用Objective-C。从一开始就很麻烦。 - Adam Waite
@AdamWaite 是的,需要一段时间(和最新的Xcode 6.1)来适应它并重新恢复生产力。 - fluidsonic
1
6.1修复了什么问题吗? - Adam Waite
最后我认为这是一个bug,在新版本中已经修复了。 - Hugo Fortis
显示剩余3条评论

2

当我尝试继承UIButton并像这样重写selected属性时,出现了相同的错误:

class ActionButton: UIButton {

    override var selected: Bool = true {
        didSet {
            updateBackgroundColor()
        }
    }
}

解决方法是从覆盖语句中删除“= true”:
class ActionButton: UIButton {

    override var selected: Bool {
        didSet {
            updateBackgroundColor()
        }
    }
}

我只是猜测,但是如果您实现了委托方法,请仔细检查是否完全正确...所有的感叹号都要正确给出...在 MKAnnotationView 的末尾加上 '!' 看起来有点可疑。


1

我搜索了关于"Command failed due to signal: Segmentation fault: 11"错误导致我的应用程序出现问题的原因...我的应用程序依赖于Parse。我发现Parse对方法进行了更改:

        query.findObjectsInBackgroundWithBlock({ (objects : [AnyObject]?, error : NSError?) -> Void in

        query.findObjectsInBackgroundWithBlock({ (objects : [**PFObject**]?, error : NSError?) -> Void in

我已经修改了所有内容,现在它可以正常工作。希望这能对使用 Parse 的人有所帮助。祝好!


0

并没有一个具体的答案,但我想要添加另一个可能导致这个 bug 的原因(因为它仍然很常见)。

我的程序有以下代码:

if (myArray.count > 0) && (.Foo != myArray.last) {
    // Do something
}

在我的情况下,.Foo 属于一个我已经实现了 Equatable 的枚举类型,然而,由于某种原因,Swift 编译器没有将我与 myArray.last 的比较标记为错误(非可选项与可选项进行比较),从而导致了分段错误。

在我的情况下,修复方法很简单,只需使用 myArray.last!,因为 myArray.count > 0 确保这将始终成功(必须至少有一个元素)。

通常情况下,一旦你知道了这个 bug,一定要将其提交到 bug report.apple.com


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接