Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
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

588 Aufrufe

Veröffentlicht am

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

Veröffentlicht in: Software
  • Als Erste(r) kommentieren

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

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

×