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
•  iCloud
•  Datenbanken
•  SQLite
•  Core Data Framework
•  Aufgaben
Dateien
3© FH AACHEN | Sebastian Meßingfeld
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
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
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
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
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
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
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
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
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
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
Datenbanken
14© FH AACHEN | Sebastian Meßingfeld
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
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
Core Data
17© FH AACHEN | Sebastian Meßingfeld
„ ... Core Data is a schema-driven
object graph management and
persistence framework.“
Apple
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
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
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
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
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 Datenbank Entität
•  „Casten“ auf zugehörige ObjC Klasse
•  Zuweisung von Werte
•  ggf. Validierung
•  Speichern des Kontextes
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
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
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
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
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 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
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
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 Ausgabe von formatierten Strings
möglich
33© FH AACHEN | Sebastian Meßingfeld
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
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
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
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
•  Austausch von Dateien: iOS-App <> Desktop
•  über Documents-Ordnder der App
•  für Endnutzer in iTunes sichtbar
38© FH AACHEN | Sebastian Meßingfeld
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
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
App
41© FH AACHEN | Sebastian Meßingfeld
FH Aachen
Fachbereich Elektrotechnik & Informationstechnik
Sebastian Meßingfeld
42© FH AACHEN | Sebastian Meßingfeld

Apple iOS - Daten

  • 1.
  • 2.
    Inhalt 2© FH AACHEN| Sebastian Meßingfeld •  Dateien •  Dateisystem •  Zugriff auf Dateien •  Objektserialisierung •  iCloud •  Datenbanken •  SQLite •  Core Data Framework •  Aufgaben
  • 3.
    Dateien 3© FH AACHEN| Sebastian Meßingfeld
  • 4.
    Dateien Dateisystem •  alles isteine 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.
    Dateien Textdateien •  Lesen undSchreiben 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.
    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.
    Dateien XML-Dateien •  SAX- undDOM-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.
    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.
    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.
    Dateien Objektserialisierung •  Unterstützung inCocoa 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.
    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.
    Dateien Andere Dateiformate •  häufigverwendete 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.
    Dateien iCloud •  (automatische) Speicherungvon 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.
    Datenbanken 14© FH AACHEN| Sebastian Meßingfeld
  • 15.
    Datenbanken SQLite •  Built-In Unterstützungvorhanden •  ü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.
    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.
    Core Data 17© FHAACHEN | Sebastian Meßingfeld „ ... Core Data is a schema-driven object graph management and persistence framework.“ Apple
  • 18.
    Datenbanken Core Data •  ORMFramework 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.
    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.
    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.
    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.
    Datenbanken Core Data -Erzeugung von Entitäten 22© FH AACHEN | Sebastian Meßingfeld
  • 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.
    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.
    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.
    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.
    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.
    Aufgaben (mit Einsatz vonCore Data) 28© FH AACHEN | Sebastian Meßingfeld
  • 29.
    Aufgaben Objektmodell 29© FH AACHEN| Sebastian Meßingfeld
  • 30.
    Aufgaben Befüllen der Persistierungsschichtunter 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.
    Aufgaben Befüllen der Persistierungsschichtunter 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.
    Aufgaben Befüllen der Persistierungsschichtunter Core Data 32© FH AACHEN | Sebastian Meßingfeld
  • 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.
    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.
    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.
    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.
    Aufgaben Dateien-Import/Export vom Device(Entwicklung) 37© FH AACHEN | Sebastian Meßingfeld
  • 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.
    Aufgaben Performance •  langsame I/OZugriffe 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.
    Aufgaben Tools •  Xcode fürDatenbank Modellierung •  Organizer / iTunes zum Datenaustausch •  SQLite-Editor für Zugriff auf Datenbank •  Navicat Premium •  Core Data Editor 40© FH AACHEN | Sebastian Meßingfeld
  • 41.
    App 41© FH AACHEN| Sebastian Meßingfeld
  • 42.
    FH Aachen Fachbereich Elektrotechnik& Informationstechnik Sebastian Meßingfeld 42© FH AACHEN | Sebastian Meßingfeld