2017-12-16 4 views
0

Ich legte ein Array zum Speichern der Daten aus Core Data.Wie kann ich die richtige Kernnummer drucken?

var users:[Users] = [] 

wenn ich einen meiner Daten aus dem Tableview löschen möchten, habe ich diese Funktion, wie folgt aus:

func deleteData(username:IndexPath){ 
     let appDelegate = UIApplication.shared.delegate as! AppDelegate 
     let context = appDelegate.persistentContainer.viewContext 

     context.delete(users[username.row]) 
     print("test1") 
     print(users[username.row]) 
     print(users) 
     print(users.count) 


     do { 
      try context.save() 
      print("test2") 
      print(users[username.row]) 
      print(users) 
      print(users.count) 
     } catch { 
      print("Could'n save data") 
     } 
    } 

ich diesen Vorgang beobachtet, und ich fand einige Frage hier:

Unterhalb der context.save(), trat ich in die print (Benutzer) und die Konsole kommt heraus, was die Nutzer Daten ist:

test2 
<Users: 0x600000286770> (entity: Users; id: 0xd000000000e40000 <x-coredata://2D4CEBDA-C1B2-4CEC-A734-B7C9579C12A5/Users/p57> ; data: <fault>) 
[<Users: 0x600000281ea0> (entity: Users; id: 0xd000000000c40000 <x-coredata://2D4CEBDA-C1B2-4CEC-A734-B7C9579C12A5/Users/p49> ; data: { 
    username = test1; 
}), <Users: 0x6000002823f0> (entity: Users; id: 0xd000000000c80000 <x-coredata://2D4CEBDA-C1B2-4CEC-A734-B7C9579C12A5/Users/p50> ; data: { 
    username = test2; 
}), <Users: 0x6000002823a0> (entity: Users; id: 0xd000000000cc0000 <x-coredata://2D4CEBDA-C1B2-4CEC-A734-B7C9579C12A5/Users/p51> ; data: { 
    username = test3; 
}), <Users: 0x600000282350> (entity: Users; id: 0xd000000000d00000 <x-coredata://2D4CEBDA-C1B2-4CEC-A734-B7C9579C12A5/Users/p52> ; data: { 
    username = test4; 
}), <Users: 0x600000282300> (entity: Users; id: 0xd000000000d40000 <x-coredata://2D4CEBDA-C1B2-4CEC-A734-B7C9579C12A5/Users/p53> ; data: { 
    username = test5; 
}), <Users: 0x600000286770> (entity: Users; id: 0xd000000000e40000 <x-coredata://2D4CEBDA-C1B2-4CEC-A734-B7C9579C12A5/Users/p57> ; data: <fault>)] 
6 

aber ich habe nur 5 Daten, nicht 6. Was ist los mit diesem Problem?

+0

Wenn Sie besorgt sind, dass das letzte Element im Array als Fehler angezeigt wird, ist es nichts, worüber man sich Sorgen machen muss. Siehe [diese Antwort] (https://stackoverflow.com/a/7304350/3985749). Fehler sind nur CoreData-Speicher, die richtigen Daten werden stillgelegt, sobald Sie auf eine der Eigenschaften des sechsten Elements zugreifen. – pbasdf

Antwort

0

Das Entfernen eines Elements aus Core Data wird nicht automatisch aus dem Datenquellenarray entfernt. Sie müssen es explizit entfernen:

context.delete(users[username.row]) 
users.remove(at: username.row) 
+0

danke Mann, aber warum die Konsole Test 6 nicht drucken kann, stattdessen drucken Fehler ?? Wie kann ich Test 6 unter context.save() drucken –

+0

Ich möchte wirklich eine andere Frage zu verstehen ist: Was sind die Daten: bedeuten? Kann ich diesen Code lösen? –

+0

Ich möchte Test 6 nicht drucken:

Verwandte Themen