2016-07-30 26 views
0

Ich erhalte einen Fehler "Ausdruckstyp' HKAnchoredObjectQuery 'ist mehrdeutig ohne mehr Inhalt" auf dem Healthkit-Code, für die Zeile "lost heartRateQuery = HKAnchoredObjectQuery (Typ: QuantityType, Prädikat: nil, Anker: Anker, Limit: Int (HKObjectQueryNoLimit)) {(Abfrage, sampleObjects, deletedObjects, newAnchor, Fehler) -> Void in "swift Fehler 'Ausdruckstyp' HKAnchoredObjectQuery 'ist mehrdeutig ohne mehr Kontext

Der Code wird aus einem Beispielprojekt kopiert, das läuft ohne Fehler in dieser Zeile, in mein Projekt, wo es nun diesen Fehler bringt. Ich bin ein Anfänger - würde Ihre Tipps schätzen.

Der Code:

func createHeartRateStreamingQuery(workoutStartDate: NSDate) -> HKQuery? { 
    // adding predicate will not work 
    //let predicate = HKQuery.predicateForSamplesWithStartDate(workoutStartDate, endDate: nil, options: HKQueryOptions.None) 

    guard let quantityType = HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate) else { return nil } 

    let heartRateQuery = HKAnchoredObjectQuery(type: quantityType, predicate: nil, anchor: anchor, limit: Int(HKObjectQueryNoLimit)) { (query, sampleObjects, deletedObjects, newAnchor, error) -> Void in 
     guard let newAnchor = newAnchor else {return} 
     self.anchor = newAnchor 
     self.updateHeartRate(sampleObjects) 
+0

Hallo! Haben Sie eine Lösung für dieses Problem gefunden? – Philip

+0

Hallo @Philip danke fürs schreiben. noch keine Lösung. –

Antwort

1

Dieser fuhr mich verrückt, ich lief in das gleiche Problem. Ich denke, wenn Sie Ihre heartRateQuery Initialisierung Linie, um diese Änderung wird es funktionieren:

let heartRateQuery = HKAnchoredObjectQuery(type: quantityType, predicate: nil, anchor: anchor, limit: Int(HKObjectQueryNoLimit), resultsHandler: { (query, sampleObjects, deletedObjects, newAnchor, error) in 
     //Do anchor code here 
     guard let newAnchor = newAnchor else {return} 
     self.anchor = newAnchor 
     self.updateHeartRate(sampleObjects) 
    }) 

Sie entfernt, um die Klammer nach der Grenze und verwenden Sie einen benannten Parameter (resultsHandler) für den Verschluss, der die Ergebnisse definiert. Außerdem benötigen Sie den Code "-> Void" nicht mehr. Dies ist für Swift 3, BTW.

Der Fehler ist insofern irreführend, als dass er die Klasse nicht zu bestimmen scheint. In meinem Fall, da meine Abfrage eine Eigenschaft ist, die als Null initialisiert wird und somit optional ist, nahm ich an, dass das Problem war. Das eigentliche Problem ist, dass es mehrdeutig ist, weil der Konstruktor falsch ist und weil er nicht korrekt ist, kann er nicht bestimmen, was das Objekt zurückgeben soll.

Wenn es hilft dies weiter zu einigen meiner Code ist, das funktioniert:

self.acQuery = HKAnchoredObjectQuery(type: sampleType, 
             predicate: pred, 
             anchor: self.acAnchor, 
             limit: Int(HKObjectQueryNoLimit), 
             resultsHandler: { (query, newSamples, deletedSamples, newAnchor, error) in 

              self.updateHeartRates(newSamples: newSamples, deletedSamples: deletedSamples, newAnchor: newAnchor, error: error); 
              }) 

Viel Glück!