2016-12-07 5 views
1

Ich versuche Daten zu speichern, die mit Pins verknüpft sind, die zu einer Map hinzugefügt werden. Jedes Mal, wenn ein Benutzer einen Pin zu einer Map hinzufügt, möchte ich Lat, Long und Titel des Pins speichern. Hier ist meine savePin() Funktion:CoreData speichert nur das zuletzt eingefügte Objekt

func savePin(location: BibleLocation) { 

    let newPin = NSEntityDescription.insertNewObject(forEntityName: "Pin", into: context!) as! Pin 
    newPin.setValue(location.lat, forKey: "lat") 
    newPin.setValue(location.long, forKey: "long") 
    newPin.setValue(location.name, forKey: "title") 
    newPin.setValue(currentBook, forKey: "pinToBook") 
    pinsForBook.append(newPin) 

    appDelegate.saveContext() 

} 

Das Problem ist, dass nur der letzte Stift eingeführt durch eine Abrufanforderung zurückgegeben wird:

func getPinsForGlossary() { 

    let request: NSFetchRequest<Pin> = Pin.fetchRequest() 
    let p = NSPredicate(format: "pinToBook = %@", currentBook!) 
    request.predicate = p 

    pinsForBook = [] 
    do { 
     let results = try context!.fetch(request as! NSFetchRequest<NSFetchRequestResult>) 
     pinsForBook = results as! [Pin] 
    } catch let error as NSError { 
     print("Could not fetch \(error), \(error.userInfo)") 
    } 
} 

Ich glaube nicht, dass ich Daten bin überschreiben, wenn ich Aufruf von insertNewObject. Warum wird nur das zuletzt eingefügte Objekt gespeichert? Danke im Voraus.

+0

Bitte zeigen Sie die Beziehung zwischen Ihren Objekten in Core Data Grafik – alexburtnik

+0

Ich denke, Sie haben eine Eins-zu-Eins-Beziehung, so wenn Sie 'currentBook' als' pinToBook' eines Objekts, wird es automatisch auf 'nil' gesetzt in der vorherigen. – alexburtnik

+1

Das war es! Ich dachte, ich hätte die Beziehungen schon festgelegt, aber ich hatte nicht Danke! –

Antwort

0

Ich denke, Sie haben eine Eins-zu-Eins-Beziehung, also wenn Sie currentBook als pinToBook eines Objekts festgelegt wird, wird es automatisch zu nil in der vorherigen gesetzt.

Wenn das Ihr Fall ist, sollten Sie Beziehung zu one-to-many gesetzt, so dass ein Buch in mehrere Pin Objekte als pinToBook Wert verwendet werden.

Verwandte Themen