2016-04-07 5 views
2

ich alle der Lokalisierungsaufzeichnungen von einem Benutzer holen will, das derzeit angemeldet istvon aktuellen iCloud Benutzern

dieser Ort bespielen Wolkenjungen schafft.

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    let location = locations.last! 
    let center = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude) 
    addCrumbPoint(center) 
    let locationRecord = CKRecord(recordType: "location") 
    locationRecord["location"] = location 
    let publicData = CKContainer.defaultContainer().publicCloudDatabase 
    publicData.saveRecord(locationRecord) { record, error in 
    } 
} 

Aber wie würde Ich gehe die Standortdatensätze nur für den aktuell angemeldeten Benutzer heraus?

Ich möchte dies verwenden, um einen Breadcrumb früherer Reisen auf einer Karte zu erstellen, aber nur es zu bekommen, um eine Liste zu drucken, wäre ein guter Start!

Hier ist mein Code so weit:

func getLocationAsync(complete: (instance: CKRecordID?, error: NSError?) ->()) { 
    let container = CKRecordID(recordName: "Location") 
    publicDB.fetchRecordWithID(location) { fetchedLocation, error in 
     if error != nil { 
      print(error!.localizedDescription) 
      complete(instance: nil, error: error) 
     } else { 
      print("fetched Location \(recordID?.recordName)") 
      complete(instance: recordID, error: nil) 
     } 
    } 
} 

Antwort

1

Wenn Ihr Ziel ist die Semmelbrösel Stellen eines Benutzers zu speichern und nicht an andere Nutzer weitergeben, dann die private Datenbank verwenden. So können Sie alle Standortdatensätze des Benutzers abrufen.

Wenn Sie die öffentliche Datenbank verwenden möchten, fügen Sie einen Eintrag vom Typ CKReference zum Datensatz Location hinzu, der auf den Benutzerdatensatz verweist. So können Sie ein Prädikat basierend auf dem Benutzer verwenden recordID

+0

Danke, ich möchte, dass alle Standortdaten an CloudKit gehen, aber ich möchte nur einzelne Benutzerdaten in dieser Ansicht anzeigen. Können Sie mir zeigen, wie Sie Ihre Bottom-Lösung implementieren? –

+0

Tom, dein Ansatz ist leider fehlerhaft; Wenn der Benutzer seinen Pfad kreuzt, schlägt der Speichervorgang fehl und wenn zwei Benutzer den Standort des anderen kreuzen, schlägt der Speichervorgang ebenfalls fehl. Sie müssen sich auch darauf konzentrieren, sicherzustellen, dass Sie die Mindestmenge an Daten in möglichst großen Blöcken an die Cloud senden, um die Effizienz so gering wie möglich zu halten. Die Idee beruht auch darauf, dass der Benutzer eine WiFi-Verbindung hat, da er sich auch bewegt, obwohl dies durchaus möglich ist, ein hohes Risiko darstellt. Speichern Sie Ihren Breadcrumb lieber in den Kerndaten, gruppieren Sie ihn in einem Datenblock und speichern Sie ihn als einen einzigen Datensatz. – user3069232

+0

Die Implementierung ist einfach, aber ich empfehle nicht, die publicDB zu verwenden, um den Standort des Benutzers so zu speichern. Es wird von Apple abgelehnt. In privaten DB und nur vom Benutzer selbst zugänglich ist in Ordnung. –