2016-11-05 4 views
0

Nach etwas intensivem Googlen und Brainstorming kann ich keine Lösung finden, also schauen wir mal, ob Stack Overflow die magische Lösung hat, die ich brauche. Ich verwende das Kontakte-Framework, um Daten von einem Kontakt abzurufen. Dies funktioniert jedoch gut, aber ich muss die Daten sortieren, damit dies funktioniert. Als Ergebnis bin ich extending ein Array , und innerhalb der Erweiterung habe ich eine Funktion, um meine Arbeit zu tun. Keine Fehler erscheinen in der Issue Navigator, aber wenn ich baue bekomme ich ein Problem in der Report Navigator sagen Command Failed due to signal: Segmentation Fault 11. Ich glaube wirklich, dass das Problem mit meiner Verwendung von Generika zusammenhängt, weil der Berichtsnavigator auf diese Zeile zeigt, und mein Googling deutet darauf hin, dass dies der Ausgangspunkt für das Problem ist, aber ich habe keine Problemumgehungen. (Ich achte sehr darauf, aber ich bin mir nicht ganz sicher.)Befehl fehlgeschlagen wegen Signal: Segmentierung Fehler 11 - Xcode 8 Swift 3

Lassen Sie mich meinen Code mit Ihnen teilen: Dies ist in meiner Erweiterung der Reihe von 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 
} 

Hier sind Screenshots der Ausgabe: error1 error2

+0

Was ist 'Selbst' in diesem Beispiel? – Aaron

+0

@Aaron Es ist [CNContact], weil Sie sich daran erinnern, dass dies innerhalb der Erweiterung eines Arrays von CNContacts liegt? – Harish

+0

@Aaron Fügen Sie Ihre Antwort zurück es funktioniert! – Harish

Antwort

1

Ihr Code den Swift-Compiler zum Absturz bringen, wenn Sie ein leeres Wörterbuch zu allDates und/oder sortedDates zuweisen:

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

Zuerst dachte ich, es war wegen CNLabeledValue nicht konform zu Hashable, aber ich glaube nicht, dass es ein Problem mit Ihrem Code ist. Zum Beispiel stürzt dies den Compiler:

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

Aber dies nicht:

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

Und in zweiten Beispiel CNContact als ein Schlüssel zum Hashable entweder nicht entspricht.

Mein Rat wäre, die Werte im Dict zu tauschen und Ihren Code auf diese Weise arbeiten zu lassen. Es wäre am besten, einen Fehlerbericht mit Apple einzureichen.

+0

Vielen Dank! Das funktioniert, aber es ist wirklich seltsam. – Harish

Verwandte Themen