CreateJob: Endlich einen Datensatz erzeugen
Hallo und Herzlich Willkommen zu unserem bneunten Teil der Serie HowToDoIt!
Inhalt dieser Folge
Wir wollen einen ersten Datensatz erzeugen. Doch dazu sind jede Menge Vorbereitungen zu treffen.
Ein einfacher Dialog soll für die Dateneingabe verwendet werden und doch sollen alle Texte auch für andere Sprachen veränderbar sein. Hier treffen wir auf das Konzept NSLocalizedString.
Closures sind ein starkes Konstrukt von Swift, wie wir in diesem Video sehen werden.
9 Comments
Hallo,
super Reihe! So gut und einfach erklärt und vor allem für Leute die schon Programmiererfahrung haben und sich nicht zum 100 mal erklären wollen was Klassen sind, aber dennoch keine Ahnung von all den Apple Frameworks haben.
Jetzt habe ich allerdings 2 Fragen: Es wurde in den Videos erklärt, dass man sich alle Videos runterladen kann und dann offline genießen kann.
Leider konnte ich nichts dergleichen finden.
Die „Hotkeys“ finde ich total wichtig zum nachschlagen, allerdings nutzlos wenn man nur via youtube die videos anschaut, oder mache ich was falsch?
Gibt es eine Möglichkeit euch eine Spende via Paypal/Flattr/Patreon o.ä. zukommen zu lassen?
Ansonsten weiter so!
Hallo Zimon,
vielen Dank für den lieben Kommentar. Schön, dass Dir unsere Tutorialreihe gefällt.
Die HowToDoIt! App für iPhone und Apple Watch war inklusive Videos und SourceCode für den AppStore vorgesehen. Dann hätte man die Videos auch downloaden können. Wir hatten uns jedoch dazu entschlossen, das Material für Euch im SwiftBlog auch kostenfrei zur Verfügung zu stellen. Insofern stimmt die Beschreibung aus den Videos nicht mehr 100 prozentig mit der aktuellen Verwendung überein.
Wir besprechen noch, ob die App trotzdem auch in den AppStore geht, dann wäre das mit der „Spende“ für den Zugriff auf Videos und Sorcecode zum downloaden auch wieder möglich 🙂
Wir bleiben an dem Thema dran!
Dankeschön und herzliche Grüße
Franky
Hallo,
coole Reihe! Was kannst du mir noch empfehlen um noch besser in swift Fuss zu fassen. Bin Neueinsteiger. Nicht nie Programmiert. Macht jedoch super Spass und ist ja auch logisch aufgebaut 🙂
PS: leider bekomme ich zum Ende des Videos nicht nur „OK button pressed“ & „text = Einkaufen“! Unten das Warning: (Finde leider nichts im Internet). Was hab ich da falsch gemacht?
Grüsse Renzo
Ok button pressed
text = Einkaufen
2015-09-02 20:07:49.540 HowToDoit-DE[3501:166404] CoreData: warning: Unable to load class named ‚Job‘ for entity ‚Job‘. Class not found, using default NSManagedObject instead.
Could not cast value of type ‚NSManagedObject_Job_‘ (0x7ff78b818740) to ‚HowToDoit_DE.Job‘ (0x107aa3ba0).
(lldb)
Hi Renzo,
kann es sein, dass Du diese @objc(Job) Annotation vor der Klasse Job vergessen hast? Hast Du auch die Modulinformation aus dem CoreData-Modeller herausgenommen?
Liebe Grüße
Franky
Hallo Franky,
am Ende des Video’s weis du noch mal auf eine Fehlermeldung hin (createWithJobName -> saveContext -> … ), die ich dann auch bekommen habe:
Ok Button pressed
text = Einkaufen
2015-09-09 16:20:25.424 First App[739:169058] Can’t create persistentStoreCoordinator
(lldb)
Was habe ich da Falsch gemacht?
Hi Basti,
wenn der persistensStoreCoordinator nicht erzeugt werden kann, ist vermutlich mit der ApplicationGroup etwas faul.
Kann es sein, dass der Ordner nicht gefunden werden kann, in dem die Datenbank-Dateien gespeichert werden sollen?
l.G.
Franky
Hi Franky,
Ahja das ist es, ich habe mir nämlich keine AppGroup angelegt, kann ich das irgendwie umgehen oder sollte ich mir dafür eine Apple Developer ID zulegen?
L.G Basti
Hallo zusammen,
erst einmal muss ich sagen: Grandioser Blog. Hilft wirklich enorm weiter, gerade auch als erfahrener Programmierer- jedoch mit wenigen Kenntnissen in Swift.
Jetzt bin ich bis zu diesem Video ohne Probleme mitgekommen, auch wenn sich Swift scheinbar nochmals von der Syntax verändert hat (musste hier und da ein paar Dinge anders programmieren, als im Video vorgegeben).
Nun bin ich genau an der Stelle, an welcher ich den Job abspeichern möchte:
static func createJobWriteName (name:String) -> Job {
let job = NSEntityDescription.insertNewObjectForEntityForName(KJobEntity, inManagedObjectContext: CoreData.sharedInstance.managedObjectContext) as! Job
job.name = name
CoreData.sharedInstance.saveContext()
return job
}
}
Allerdings erscheint erst eine Warnung, dann eine Fehlermeldung:
2015-11-29 13:21:21.564 Voldano[760:14332] CoreData: warning: Unable to load class named ‚Voldano.Job‘ for entity ‚Job‘. Class not found, using default NSManagedObject instead.
Could not cast value of type ‚NSManagedObject_Job_‘ (0x7fac79d951e0) to ‚Voldano.Job‘ (0x10062ddf0).
Irgendeine Idee? Wäre wirklich klasse- dann könnte ich mit den Folgevideos weitermachen…
Besten Dank!
Viele Grüße,
Stephan
Hi Stephan,
Die Klasse „Voldano.Job“ ist mir unbekannt. Hast Du diese irgendwo in Deinem Projekt erzeugt, diese jedoch nicht im CoreDataModel verwendet? Oder umgekehrt, hast Du im CoreDataModel eine Entity diesen Namens angegeben, nicht jedoch eine passende Swift Klasse dazu?
CoreData ist durch interne Mechanismen, basierend auf Introspection, sehr penible, was die Namensgebung anbelangt, da bleibt leider kein Spielraum übrig.
Des weiteren ist es so, dass mit Erscheinen von iOS9 und WatchOS2 leider vielen geändert hat, und Apps nicht wie vorher von Apple versprochen kompatibel bleiben. Der Mechanismus mit der „SharedAppGroup“ zum Austausch von Daten zwischen iPhone und AppleWatch, wie später als tragende Säule in dem Beispielprojekt verwendet, funktioniert nicht mehr 🙁
Insofern wirst Du die App stand heute leider nicht mehr in Betrieb nehmen können. Grundlegende Dinge wie CoreData, UITableView, NSFetchedResultsController u.s.w. sind davon unberührt, so dass das Tutorial hier immer noch sehr hilfreich sein kann. Nur leider wird das Gesamtziel nicht mehr erreicht.
Wir arbeiten an neuen, komplexen Tutorials, die dann für einige Wochen wieder dem Stand der Technik entsprechen werden, bis Apple wieder einmal alte Zöpfe abschneidet.
Liebe Grüße und dennoch HappyCoding !!!! 🙂
Franky