由于信号导致命令失败:分段错误11 - Xcode 8 Swift 3

时间:2016-11-05 22:35:44

标签: ios swift segmentation-fault swift3 cncontact

经过一番激烈的谷歌搜索和头脑风暴后,我找不到解决方案,所以让我们看看Stack Overflow是否有我需要的神奇解决方案。我正在使用Contacts框架从联系人中获取日期。但是,这很好用,但我需要对日期进行排序才能使其正常工作。因此,我extending Array CNContact,在扩展程序中,我有一个功能来完成我的工作。 Issue Navigator中没有显示任何错误,但是当我构建时,我在Report NavigatorCommand Failed due to signal: Segmentation Fault 11时遇到了问题。我真的相信问题在于我使用Generics,因为报告导航器指向那条线,我的谷歌搜索表明这是问题的来源,但我没有解决方法。 (我非常怀疑这一点,但我不完全确定。)

让我与您分享我的代码: 这是我对CNContacts数组的扩展。

typealias ContactDate = CNLabeledValue<NSDateComponents>
func filteredAndSortedDates() -> [ContactDate : CNContact] { // Error occurs on this line according to the issue.

    var allDates: [ContactDate : CNContact] = [:]

    var sortedDates: [ContactDate: CNContact] = [:]


    for contact in self {
        if contact.isKeyAvailable(CNContactDatesKey) {
            for date in contact.dates {
                allDates[date] = contact
            }
        }
    }

    for (key, value) in (Array(allDates).sorted {
        date1, date2 in
        if date1.key.value.month == date2.key.value.month {
            return date1.key.value.day < date2.key.value.day
        } else {
            return date1.key.value.month < date2.key.value.month
        }
    }) {
        sortedDates[key] = value
    }

    return sortedDates
}

以下是该问题的屏幕截图: error1 error2

1 个答案:

答案 0 :(得分:1)

当您将空字典分配给allDates和/或sortedDates时,您的代码导致Swift编译器崩溃:

var allDates: [ContactDate: CNContact] = [:]
var sortedDates: [ContactDate: CNContact] = [:]

起初我认为这是由于CNLabeledValue不符合Hashable但我不认为这是您的代码的问题。例如,这会使编译器崩溃:

var crashingDict: [CNLabeledValue<NSDateComponents>: CNContact] = [:]

但这不是:

 var workingDict: [CNContact: CNLabeledValue<NSDateComponents>] = [:]

在第二个示例中,CNContact作为键也不符合Hashable

我的建议是交换dict中的值并让代码以这种方式工作。最好向Apple提交错误报告。