iOS
Daten
Sebastian Meßingfeld
23.05.2013
1© FH AACHEN | Sebastian Meßingfeld
Inhalt
2© FH AACHEN | Sebastian Meßingfeld
•  Dateien
•  Dateisystem
•  Zugriff auf Dateien
•  Objektserialisierung
•  iCl...
Dateien
3© FH AACHEN | Sebastian Meßingfeld
Dateien
Dateisystem
•  alles ist eine Datei
•  auch die Datenbank (keine Client/Server Struktur)
•  Dateisystem einer Anwe...
Dateien
Textdateien
•  Lesen und Schreiben von/aus Dateien im App-
Dateisystem möglich
•  Byte-Stream Ein-/Ausgabe
•  Zeic...
Dateien
Textdateien - Beispiele
NSString *path = [[NSBundle mainBundle] ! ! ! !
! pathForResource:@"kategorien"ofType:@"tx...
Dateien
XML-Dateien
•  SAX- und DOM-Parsing Unterstützung vorhanden
•  Simple API for XML (SAX)
•  ereignisgesteuert
•  Ca...
Dateien
Property Lists (*.plist)
•  XML-Struktur
•  definierte XML-Tags für Standard-Datentypen
•  <string>
•  <array>
•  ...
Dateien
Property Lists (*.plist) - Beispiel
Beispiel:
// Pfad zur Datei"
NSString* path = [[NSBundle mainBundle]
pathForRe...
Dateien
Objektserialisierung
•  Unterstützung in Cocoa Touch
•  akt. Objektzustand kann gespeichert werden
•  mit „Unter“-...
Dateien
Objektserialisierung - Beispiel
// Instanzmethode: Objekt serialisieren"
- (void)encodeWithCoder:(NSCoder *)aCoder...
Dateien
Andere Dateiformate
•  häufig verwendete Formate: CSV, JSON
•  keine Parser direkt in Cocoa Touch vorhanden
•  Ver...
Dateien
iCloud
•  (automatische) Speicherung von Daten auf
externen Servern
•  Daten
•  Dokumente / Dateien
•  Key / Value...
Datenbanken
14© FH AACHEN | Sebastian Meßingfeld
Datenbanken
SQLite
•  Built-In Unterstützung vorhanden
•  über C-Schnittstelle ansprechbar (libsqlite3)
•  eigene, extern ...
Datenbanken
SQLite - Beispiel
NSString* path = [[NSBundle mainBundle] pathForResource:@“Data" ofType:@"sqlite"];"
"
sqlite...
Core Data
17© FH AACHEN | Sebastian Meßingfeld
„ ... Core Data is a schema-driven
object graph management and
persistence ...
Datenbanken
Core Data
•  ORM Framework von Apple
•  und ein bisschen mehr ...
•  von MacOS X zu iOS (ab 3.0) migriert
•  w...
Datenbanken
Core Data - Was kann Core Data?
•  Aufbau einer datengetriebenen Anwendung:
•  Core Data bietet für einzelne F...
Datenbanken
Core Data - Aufbau
•  Verwaltung als Objekt-Graph
•  Objekte sind mit einem Kontext (Blackbox)
verbunden
•  Ko...
Datenbanken
Core Data - Erzeugung von Entitäten
21© FH AACHEN | Sebastian Meßingfeld
•  Modellierung von Entitäten und der...
Datenbanken
Core Data - Erzeugung von Entitäten
22© FH AACHEN | Sebastian Meßingfeld
Datenbanken
Core Data - Speichern von Datensätzen
23© FH AACHEN | Sebastian Meßingfeld
•  Erzeugung einer Instanz einer Da...
Datenbanken
Core Data - Speichern von Datensätzen
"
// Artikel erzeugen"
Artikel *newArt = (Artikel *)[[NSManagedObject !
...
Datenbanken
Core Data – Laden von Datensätzen
25© FH AACHEN | Sebastian Meßingfeld
•  Erstellen eines Entitäts-Modells für...
Datenbanken
Core Data – Laden von Datensätzen
// Entitäts Modell erstellen"
NSEntityDescription *entitydescArtikel = ! !
!...
Datenbanken
Core Data – Persistierungsschicht
27© FH AACHEN | Sebastian Meßingfeld
•  bereits implementiert
•  für den Ent...
Aufgaben
(mit Einsatz von Core Data)
28© FH AACHEN | Sebastian Meßingfeld
Aufgaben
Objektmodell
29© FH AACHEN | Sebastian Meßingfeld
Aufgaben
Befüllen der Persistierungsschicht unter Core Data
•  im Code
•  einmalig, beim ersten Start der Anwendung
•  aus...
Aufgaben
Befüllen der Persistierungsschicht unter Core Data
•  modifizieren der Persistierungsschicht (*.sqlite)
•  eigene...
Aufgaben
Befüllen der Persistierungsschicht unter Core Data
32© FH AACHEN | Sebastian Meßingfeld
Aufgaben
Daten-Export aus Datenbank: CSV
•  keine Unterstützung in CocoaTouch vorhanden
•  für einzelne Tabelle mit Ausgab...
Aufgaben
Daten-Export aus Datenbank: CSV
"
for (NSArray *arr in data) {"
for (NSString __strong* str in arr) {"
str = [str...
Aufgaben
Daten-Export aus Datenbank: XML
•  keine Unterstützung in CocoaTouch vorhanden
•  Export als Property List
•  XML...
Aufgaben
Dateien-Import/Export vom Device (Entwicklung)
•  Zugriff auf App-Dateisystem möglich
•  nicht so „verschlossen“ ...
Aufgaben
Dateien-Import/Export vom Device (Entwicklung)
37© FH AACHEN | Sebastian Meßingfeld
Aufgaben
Dateien-Import/Export vom Device (Endnutzer)
•  iTunes File Sharing
•  über Flag in App-Konfiguration aktivierbar...
Aufgaben
Performance
•  langsame I/O Zugriffe auf Datenbank /
Dateisystem
•  Lösung: Lazy Loading von Daten(sätzen)
•  Erz...
Aufgaben
Tools
•  Xcode für Datenbank Modellierung
•  Organizer / iTunes zum Datenaustausch
•  SQLite-Editor für Zugriff a...
App
41© FH AACHEN | Sebastian Meßingfeld
FH Aachen
Fachbereich Elektrotechnik & Informationstechnik
Sebastian Meßingfeld
42© FH AACHEN | Sebastian Meßingfeld
Nächste SlideShare
Wird geladen in …5
×

Apple iOS - Daten

517 Aufrufe

Veröffentlicht am

Umgang mit Daten unter Apple iOS: Text, Plist, XML, SQLite, CoreData

Veröffentlicht in: Software
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
517
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
3
Aktionen
Geteilt
0
Downloads
0
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Apple iOS - Daten

  1. 1. iOS Daten Sebastian Meßingfeld 23.05.2013 1© FH AACHEN | Sebastian Meßingfeld
  2. 2. Inhalt 2© FH AACHEN | Sebastian Meßingfeld •  Dateien •  Dateisystem •  Zugriff auf Dateien •  Objektserialisierung •  iCloud •  Datenbanken •  SQLite •  Core Data Framework •  Aufgaben
  3. 3. Dateien 3© FH AACHEN | Sebastian Meßingfeld
  4. 4. Dateien Dateisystem •  alles ist eine Datei •  auch die Datenbank (keine Client/Server Struktur) •  Dateisystem einer Anwendung: •  *.app: die eigentliche Anwendung (readonly) •  Documents: für Nutzerdaten •  Library: für sonstige Anwendungsdaten •  tmp: temporäre Dateien 4© FH AACHEN | Sebastian Meßingfeld
  5. 5. Dateien Textdateien •  Lesen und Schreiben von/aus Dateien im App- Dateisystem möglich •  Byte-Stream Ein-/Ausgabe •  Zeichenbasierte Ein-/Ausgabe •  Verarbeitung von Dateiinhalten über String- Operationen •  keine „native“ Unterstützung für strukturierte „Plain-Text“-Dateiinhalte •  CSV 5© FH AACHEN | Sebastian Meßingfeld
  6. 6. Dateien Textdateien - Beispiele NSString *path = [[NSBundle mainBundle] ! ! ! ! ! pathForResource:@"kategorien"ofType:@"txt"];" " " --" " // Inhalt in einem Byte-Puffer" NSData *databuffer = [NSData dataWithContentsOfFile: path];" " " --" " // Zeichenbasierte Verarbeitung" NSString *content = [NSString stringWithContentsOfFile:path ! ! ! !encoding:NSUTF8StringEncoding error:nil];" " // Array mit Zeilen aus Datei" NSArray *lines = [content componentsSeparatedByCharactersInSet: ! ! ! [NSCharacterSet newlineCharacterSet]]; 6© FH AACHEN | Sebastian Meßingfeld
  7. 7. Dateien XML-Dateien •  SAX- und DOM-Parsing Unterstützung vorhanden •  Simple API for XML (SAX) •  ereignisgesteuert •  Callback-Funktionen für Ereignisse (z.B. Startelement) •  Document Object Model (DOM) •  direkter Zugriff auf Elemente •  mittels libxml2 •  C-basierte Implementierung •  beide Lösungen weniger alltagstauglich •  besser Dritt-Bibliothek: z.B. TouchXML 7© FH AACHEN | Sebastian Meßingfeld
  8. 8. Dateien Property Lists (*.plist) •  XML-Struktur •  definierte XML-Tags für Standard-Datentypen •  <string> •  <array> •  Lesen und Schreiben von Datenstrukturen •  Arrays •  Dictionary •  „nur“ für Standard-Datentypen •  NSUserDefaults: Key/Value - Speicher mit gleichzeitiger Synchronisation in Property List! 8© FH AACHEN | Sebastian Meßingfeld
  9. 9. Dateien Property Lists (*.plist) - Beispiel Beispiel: // Pfad zur Datei" NSString* path = [[NSBundle mainBundle] pathForResource:@"kategorien" ofType:@"plist"];" " // plist in Array laden" NSArray* kategorien = [NSArray !arrayWithContentsOfFile:path];" " // Ausgabe " for (NSString* kategorie in kategorien) {" NSLog(@"%@", kategorie);" } 9© FH AACHEN | Sebastian Meßingfeld
  10. 10. Dateien Objektserialisierung •  Unterstützung in Cocoa Touch •  akt. Objektzustand kann gespeichert werden •  mit „Unter“-Objekten (Komposition) •  Object-Graph (gleich mehr) •  Serialisierung in P-List oder Binär-String •  Implementierung von encode / decode Methode notwendig, die Eigenschaften sichert / wiederherstellt 10© FH AACHEN | Sebastian Meßingfeld
  11. 11. Dateien Objektserialisierung - Beispiel // Instanzmethode: Objekt serialisieren" - (void)encodeWithCoder:(NSCoder *)aCoder" {" [aCoder encodeObject:self.beschreibung forKey:@“Beschreibung"];" [aCoder encodeObject:self.preis forKey:@“preis"];" }" " // Instanzmethode (Kontruktur): Objekt deserialisieren" - (id)initWithCoder:(NSCoder *)aDecoder" {" self = [super init];" if (nil != self) {" self.beschreibung = [aDecoder decodeObjectForKey:@”beschreibung"];" self.preis = [aDecoder decodeObjectForKey:@”preis"];" }" return self;" }" " // Objekt serialisieren [NSKeyedArchiver archivedDataWithRootObject:objekt];" " // Objekt deserialisieren" [NSKeyedUnarchiver unarchiveObjectWithData:userData];" " 11© FH AACHEN | Sebastian Meßingfeld
  12. 12. Dateien Andere Dateiformate •  häufig verwendete Formate: CSV, JSON •  keine Parser direkt in Cocoa Touch vorhanden •  Verwendung von Dritt-Bibliotheken •  CSV: https://github.com/davedelong/CHCSVParser •  JSON: https://github.com/johnezang/JSONKit 12© FH AACHEN | Sebastian Meßingfeld
  13. 13. Dateien iCloud •  (automatische) Speicherung von Daten auf externen Servern •  Daten •  Dokumente / Dateien •  Key / Value – Speicher (ähnlich NSUserDefaults) •  Synchronisation •  zwischen gleichen Anwendungen auf unterschiedlichen Geräten •  zwischen unterschiedlichen Anwendungen, auch Desktop-Anwendungen 13© FH AACHEN | Sebastian Meßingfeld
  14. 14. Datenbanken 14© FH AACHEN | Sebastian Meßingfeld
  15. 15. Datenbanken SQLite •  Built-In Unterstützung vorhanden •  über C-Schnittstelle ansprechbar (libsqlite3) •  eigene, extern erstellte SQLite-Datenbank kann mit ausgeliefert werden •  kein ORM dafür in Cocoa Touch vorhanden •  CRUD-Operationen müssen über SQL-Statements selbst erstellt werden 15© FH AACHEN | Sebastian Meßingfeld
  16. 16. Datenbanken SQLite - Beispiel NSString* path = [[NSBundle mainBundle] pathForResource:@“Data" ofType:@"sqlite"];" " sqlite3 *database;" sqlite3_stmt *statement;" " NSString *sql = @"SELECT name FROM Artikel ORDER BY name ASC";" " int result = sqlite3_open([path UTF8String], &database);" " if(SQLITE_OK == result)" {" NSLog(@"Could open database");" }" " if (sqlite3_prepare_v2(database, [sql UTF8String], -1, &statement, nil) == SQLITE_OK) { " " while (sqlite3_step(statement) == SQLITE_ROW) {" NSString *message = [NSString stringWithUTF8String:(char *) ! ! ! ! ! ! !sqlite3_column_text(statement, 0)];" " // Mach' was" }" " sqlite3_finalize(statement);" } 16© FH AACHEN | Sebastian Meßingfeld
  17. 17. Core Data 17© FH AACHEN | Sebastian Meßingfeld „ ... Core Data is a schema-driven object graph management and persistence framework.“ Apple
  18. 18. Datenbanken Core Data •  ORM Framework von Apple •  und ein bisschen mehr ... •  von MacOS X zu iOS (ab 3.0) migriert •  wie andere APIs bisher auch •  keine Neu-Entwicklung für iOS •  Erfahrung in iOS-Programmierung nötig •  kein Einsteiger-Thema 18© FH AACHEN | Sebastian Meßingfeld
  19. 19. Datenbanken Core Data - Was kann Core Data? •  Aufbau einer datengetriebenen Anwendung: •  Core Data bietet für einzelne Funktionalitäten Schnittstellen / Implementierung an •  Struktur ist vorgegeben •  Anpassungen der einzelnen Punkte möglich 19© FH AACHEN | Sebastian Meßingfeld Speichern Rückgängig Wiederholen Validierung Lazy Loading Suche Daten- speicher Anwendung View 1 View 2 Speichern Rückgängig Wiederholen Validierung Lazy Loading Suche Daten- speicher Anwendung View 1 View 2 Core DataEntwickler
  20. 20. Datenbanken Core Data - Aufbau •  Verwaltung als Objekt-Graph •  Objekte sind mit einem Kontext (Blackbox) verbunden •  Kontext ist für das Life-Cycle Management der zugehörigen Objekte verantwortlich •  Beziehungen der Objekte zueinander •  Persistierung 20© FH AACHEN | Sebastian Meßingfeld Kategorie Artikel Artikel Artikel
  21. 21. Datenbanken Core Data - Erzeugung von Entitäten 21© FH AACHEN | Sebastian Meßingfeld •  Modellierung von Entitäten und deren Beziehungen in Xcode •  automatische Generierung von ObjC-Klassen aus Entitäten möglich •  Zugriff im Code über Core-Data Schnittstellen
  22. 22. Datenbanken Core Data - Erzeugung von Entitäten 22© FH AACHEN | Sebastian Meßingfeld
  23. 23. Datenbanken Core Data - Speichern von Datensätzen 23© FH AACHEN | Sebastian Meßingfeld •  Erzeugung einer Instanz einer Datenbank Entität •  „Casten“ auf zugehörige ObjC Klasse •  Zuweisung von Werte •  ggf. Validierung •  Speichern des Kontextes
  24. 24. Datenbanken Core Data - Speichern von Datensätzen " // Artikel erzeugen" Artikel *newArt = (Artikel *)[[NSManagedObject ! ! !alloc]initWithEntity:@”Artikel" ! ! ! !insertIntoManagedObjectContext:context];" " // Werte zuweisen" newArt.artikelname = @”Name";" newArt.artikelpreis = @1.1;" newArt.artikelbild = @”xxx.jpg";" newArt.artikelbeschreibung = @”Beschreibung";" newArt.kategorie = (Kategorie *)newKat;" " // Kontext speichern" [context save:&error]; 24© FH AACHEN | Sebastian Meßingfeld
  25. 25. Datenbanken Core Data – Laden von Datensätzen 25© FH AACHEN | Sebastian Meßingfeld •  Erstellen eines Entitäts-Modells für abzufragenden Typen •  Abfrage gegen Persistierungsschicht erstellen •  mit Filtern •  mit Sortierung •  Abfrage ausführen •  Ergebnis-Array enthält Objekte vom Typen
  26. 26. Datenbanken Core Data – Laden von Datensätzen // Entitäts Modell erstellen" NSEntityDescription *entitydescArtikel = ! ! ![NSEntityDescription entityForName:@"Artikel" ! !inManagedObjectContext:context];" " // Datenbank abfragen" NSFetchRequest *request = [[NSFetchRequest alloc]init] [request setEntity:entitydescArtikel];" " // Ergebnis verarbeiten" NSArray *matchingData = [context! ! ! ! ! !executeFetchRequest:request error:nil];" " if (matchingData.count > 0) {" for (Artikel *artikel in matchingData) {" // Mach‘ was" }" } 26© FH AACHEN | Sebastian Meßingfeld
  27. 27. Datenbanken Core Data – Persistierungsschicht 27© FH AACHEN | Sebastian Meßingfeld •  bereits implementiert •  für den Entwickler i.d.R nicht „sichtbar“ •  wird aus erzeugten Entitäten generiert •  kann verschiedene Ausprägungen haben •  SQLite •  XML •  eigener Datenspeicher kann angegeben werden •  muss Beziehung der Entitäten beachten
  28. 28. Aufgaben (mit Einsatz von Core Data) 28© FH AACHEN | Sebastian Meßingfeld
  29. 29. Aufgaben Objektmodell 29© FH AACHEN | Sebastian Meßingfeld
  30. 30. Aufgaben Befüllen der Persistierungsschicht unter Core Data •  im Code •  einmalig, beim ersten Start der Anwendung •  aus Dateien (CSV, XML, ...) •  mit der App mitgeliefert •  Download •  modifizieren der Persistierungsschicht (*.sqlite) •  Anwendung wird modelliert + erstellt •  Datenbank •  wird aus fertigen App entnommen •  mit den Daten befüllt •  App wird mit Angabe der gefüllten DB neu erstellt 30© FH AACHEN | Sebastian Meßingfeld
  31. 31. Aufgaben Befüllen der Persistierungsschicht unter Core Data •  modifizieren der Persistierungsschicht (*.sqlite) •  eigene SQLite-Datenbank i.d.R nicht verwendbar •  Aufbau durch Core Data Model vorgegeben (Spalten, Keys, ...) •  „Lösung“: •  Mac-Anwendung mit gleichem Core Data Model erstellen •  Datenbank der Mac-Anwendung befüllen •  Datenbank für iOS-App verwenden 31© FH AACHEN | Sebastian Meßingfeld
  32. 32. Aufgaben Befüllen der Persistierungsschicht unter Core Data 32© FH AACHEN | Sebastian Meßingfeld
  33. 33. Aufgaben Daten-Export aus Datenbank: CSV •  keine Unterstützung in CocoaTouch vorhanden •  für einzelne Tabelle mit Ausgabe von formatierten Strings möglich 33© FH AACHEN | Sebastian Meßingfeld
  34. 34. Aufgaben Daten-Export aus Datenbank: CSV " for (NSArray *arr in data) {" for (NSString __strong* str in arr) {" str = [str stringByReplacingOccurrencesOfString:@""" ! ! !withString:@""" ];" str = [str stringByReplacingOccurrencesOfString:@";" ! ! !withString:@";" ];" }" " csv = [arr componentsJoinedByString:@"";""];" csv = [NSString stringWithFormat:@""%@"n", csv];" " [myHandle seekToEndOfFile];" [myHandle writeData:[csv ! ! ! ! " dataUsingEncoding:NSUTF8StringEncoding]];" }" 34© FH AACHEN | Sebastian Meßingfeld
  35. 35. Aufgaben Daten-Export aus Datenbank: XML •  keine Unterstützung in CocoaTouch vorhanden •  Export als Property List •  XML-Struktur mit einfachen Datentypen •  Export von ObjC Objekten als verschachtelte Datenstruktur 35© FH AACHEN | Sebastian Meßingfeld
  36. 36. Aufgaben Dateien-Import/Export vom Device (Entwicklung) •  Zugriff auf App-Dateisystem möglich •  nicht so „verschlossen“ wie oft angenommen •  im Simulator •  Abbild der lauffähigen Anwendungen auf Entwicklungsrechner •  Ordnerstruktur mit Dateien, wie bspw. *.sqlite •  ~/Library/Application Support/iPhone Simulator ... •  auf Endgeräten •  Download / Upload eines App-Abbilds über „Organizer“-Tool •  Drittanbieter-Tools: z.B. iExplorer (auch für Endnutzer) 36© FH AACHEN | Sebastian Meßingfeld
  37. 37. Aufgaben Dateien-Import/Export vom Device (Entwicklung) 37© FH AACHEN | Sebastian Meßingfeld
  38. 38. Aufgaben Dateien-Import/Export vom Device (Endnutzer) •  iTunes File Sharing •  über Flag in App-Konfiguration aktivierbar •  Austausch von Dateien: iOS-App <> Desktop •  über Documents-Ordnder der App •  für Endnutzer in iTunes sichtbar 38© FH AACHEN | Sebastian Meßingfeld
  39. 39. Aufgaben Performance •  langsame I/O Zugriffe auf Datenbank / Dateisystem •  Lösung: Lazy Loading von Daten(sätzen) •  Erzeugung von 10.000 Beispieldatensätzen ca. 3 Minuten 39© FH AACHEN | Sebastian Meßingfeld
  40. 40. Aufgaben Tools •  Xcode für Datenbank Modellierung •  Organizer / iTunes zum Datenaustausch •  SQLite-Editor für Zugriff auf Datenbank •  Navicat Premium •  Core Data Editor 40© FH AACHEN | Sebastian Meßingfeld
  41. 41. App 41© FH AACHEN | Sebastian Meßingfeld
  42. 42. FH Aachen Fachbereich Elektrotechnik & Informationstechnik Sebastian Meßingfeld 42© FH AACHEN | Sebastian Meßingfeld

×