2016-11-05 1 views
0

После некоторого интенсивного поиска и мозгового штурма я не могу найти решение, поэтому давайте посмотрим, имеет ли Stack Overflow магическое решение, которое мне нужно. Я использую структуру «Контакты» для получения дат от контакта. Однако это хорошо работает, но мне нужно сортировать даты, чтобы это работало. В результате я extending a ArrayCNContact, а внутри расширения у меня есть функция для выполнения моей работы. Ошибок не появляется в Issue Navigator, но когда я строю, я получаю сообщение об ошибке Report Navigator, говоря Command Failed due to signal: Segmentation Fault 11. Я действительно верю, что проблема связана с моим использованием Generics, потому что навигатор отчетов указывает на эту строку, и мой googling предполагает, что именно здесь возникает проблема, но у меня нет обходных решений. (Я очень подозреваю это, но я не совсем уверен.)Команда Ошибка из-за сигнала: Сегментация Неисправность 11 - Xcode 8 Swift 3

Позвольте поделиться своим кодом с вами: Это внутри моего расширения массива 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

+0

Что такое 'self' в этом примере? – Aaron

+0

@Aaron Это [CNContact], потому что помните, что это внутри расширения массива CNContacts? – Harish

+0

@Aaron Добавьте ответ, это работает! – Harish

ответ

1

Ваш код вызывает Swift компилятор сбой при назначении пустого словаря для allDates и/или sortedDates:

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

Сначала я думал, что это произошло из-за CNLabeledValue, не соответствующего Hashable, но я не думаю, что это проблема с вашим кодом. Например, это происходит сбой компилятора:

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

Но это не делает:

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

А во втором примере, CNContact как ключ не соответствует Hashable либо.

Моим советом было бы поменять значения в dict и заставить ваш код работать таким образом. Лучше всего было бы написать отчет об ошибке с Apple.

+0

Большое спасибо! Это работает, но это действительно странно. – Harish

Смежные вопросы