命令因信号而失败:分段错误 11 -- Xcode 8 Swift 3
Command Failed due to signal: Segmentation Fault 11 -- Xcode 8 Swift 3
经过激烈的谷歌搜索和头脑风暴后,我找不到解决方案,所以让我们看看 Stack Overflow 是否有我需要的神奇解决方案。我正在使用联系人框架从联系人中获取日期。但是,这很有效,但我需要对日期进行排序才能使其正常工作。因此,我是 extending
Array
的 CNContact
,并且在扩展中我有一个功能可以完成我的工作。 Issue Navigator
中没有显示错误,但是当我构建时,我在 Report Navigator
中遇到问题,说 Command Failed due to signal: Segmentation Fault 11
。我真的相信问题出在我对泛型的使用上,因为报告导航器指向那条线,我的谷歌搜索表明这就是问题的来源,但我没有解决方法。 (我高度怀疑这一点,但我不完全确定。)
让我与您分享我的代码:
这是我对 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
}
问题截图如下:
当您将空字典分配给 allDates
and/or sortedDates
:
时,您的代码导致 Swift 编译器崩溃
var allDates: [ContactDate: CNContact] = [:]
var sortedDates: [ContactDate: CNContact] = [:]
起初我以为是CNLabeledValue
不符合Hashable
,但我不认为这是你的代码的问题。例如,这会使编译器崩溃:
var crashingDict: [CNLabeledValue<NSDateComponents>: CNContact] = [:]
但事实并非如此:
var workingDict: [CNContact: CNLabeledValue<NSDateComponents>] = [:]
在第二个示例中,CNContact
作为键也不符合 Hashable
。
我的建议是交换字典中的值并让您的代码以这种方式工作。最好向 Apple 提交错误报告。
经过激烈的谷歌搜索和头脑风暴后,我找不到解决方案,所以让我们看看 Stack Overflow 是否有我需要的神奇解决方案。我正在使用联系人框架从联系人中获取日期。但是,这很有效,但我需要对日期进行排序才能使其正常工作。因此,我是 extending
Array
的 CNContact
,并且在扩展中我有一个功能可以完成我的工作。 Issue Navigator
中没有显示错误,但是当我构建时,我在 Report Navigator
中遇到问题,说 Command Failed due to signal: Segmentation Fault 11
。我真的相信问题出在我对泛型的使用上,因为报告导航器指向那条线,我的谷歌搜索表明这就是问题的来源,但我没有解决方法。 (我高度怀疑这一点,但我不完全确定。)
让我与您分享我的代码: 这是我对 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
}
问题截图如下:
当您将空字典分配给 allDates
and/or sortedDates
:
var allDates: [ContactDate: CNContact] = [:]
var sortedDates: [ContactDate: CNContact] = [:]
起初我以为是CNLabeledValue
不符合Hashable
,但我不认为这是你的代码的问题。例如,这会使编译器崩溃:
var crashingDict: [CNLabeledValue<NSDateComponents>: CNContact] = [:]
但事实并非如此:
var workingDict: [CNContact: CNLabeledValue<NSDateComponents>] = [:]
在第二个示例中,CNContact
作为键也不符合 Hashable
。
我的建议是交换字典中的值并让您的代码以这种方式工作。最好向 Apple 提交错误报告。