SlideShare ist ein Scribd-Unternehmen logo
1 von 42
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

Weitere ähnliche Inhalte

Andere mochten auch

#YesWeCode Deck
#YesWeCode Deck#YesWeCode Deck
#YesWeCode DeckJen Kim
 
Schuljahrbuch? So geht's!
Schuljahrbuch? So geht's! Schuljahrbuch? So geht's!
Schuljahrbuch? So geht's! BücherKammer
 
DGSMTech auf der Interschutz 2015 - Standpräsentation
DGSMTech auf der Interschutz 2015 - StandpräsentationDGSMTech auf der Interschutz 2015 - Standpräsentation
DGSMTech auf der Interschutz 2015 - StandpräsentationStefan Martini
 
Ost 1 10898 73
Ost 1 10898 73Ost 1 10898 73
Ost 1 10898 73zeemorg
 
Visita Laureles Noviembre 2007
Visita Laureles Noviembre 2007Visita Laureles Noviembre 2007
Visita Laureles Noviembre 2007ecologico
 
Visual illusions Kinderuni 2013
Visual illusions Kinderuni 2013Visual illusions Kinderuni 2013
Visual illusions Kinderuni 2013Niia Nikolova
 
El periodismo y la cultura del cambio
El periodismo y la cultura del cambioEl periodismo y la cultura del cambio
El periodismo y la cultura del cambiogrmadryn
 
Presentación Red Merlin Guerin
Presentación Red Merlin GuerinPresentación Red Merlin Guerin
Presentación Red Merlin Guerindaniadmin
 
Instructions MINOX Wildfire DTC 600 | Optics Trade
Instructions MINOX Wildfire DTC 600 | Optics TradeInstructions MINOX Wildfire DTC 600 | Optics Trade
Instructions MINOX Wildfire DTC 600 | Optics TradeOptics-Trade
 
Schwerpunktschule
SchwerpunktschuleSchwerpunktschule
Schwerpunktschuleebr-hg
 
Fort- und Weiterbildungsmöglichkeiten für Lehrer
Fort- und Weiterbildungsmöglichkeiten für LehrerFort- und Weiterbildungsmöglichkeiten für Lehrer
Fort- und Weiterbildungsmöglichkeiten für LehrerBeKat
 
3 Umpire-System (Fortgeschrittene)
3 Umpire-System (Fortgeschrittene)3 Umpire-System (Fortgeschrittene)
3 Umpire-System (Fortgeschrittene)Raoul Machalet
 
Tics En Educación
Tics En EducaciónTics En Educación
Tics En Educaciónjjleer
 
Gandhi Elhombredelaverdaderaresistencia
Gandhi ElhombredelaverdaderaresistenciaGandhi Elhombredelaverdaderaresistencia
Gandhi Elhombredelaverdaderaresistenciafrancklin castillo
 

Andere mochten auch (20)

Das Silvester
Das SilvesterDas Silvester
Das Silvester
 
Titulo2007
Titulo2007Titulo2007
Titulo2007
 
#YesWeCode Deck
#YesWeCode Deck#YesWeCode Deck
#YesWeCode Deck
 
Schuljahrbuch? So geht's!
Schuljahrbuch? So geht's! Schuljahrbuch? So geht's!
Schuljahrbuch? So geht's!
 
DGSMTech auf der Interschutz 2015 - Standpräsentation
DGSMTech auf der Interschutz 2015 - StandpräsentationDGSMTech auf der Interschutz 2015 - Standpräsentation
DGSMTech auf der Interschutz 2015 - Standpräsentation
 
Ost 1 10898 73
Ost 1 10898 73Ost 1 10898 73
Ost 1 10898 73
 
Visita Laureles Noviembre 2007
Visita Laureles Noviembre 2007Visita Laureles Noviembre 2007
Visita Laureles Noviembre 2007
 
Visual illusions Kinderuni 2013
Visual illusions Kinderuni 2013Visual illusions Kinderuni 2013
Visual illusions Kinderuni 2013
 
El periodismo y la cultura del cambio
El periodismo y la cultura del cambioEl periodismo y la cultura del cambio
El periodismo y la cultura del cambio
 
Presentación Red Merlin Guerin
Presentación Red Merlin GuerinPresentación Red Merlin Guerin
Presentación Red Merlin Guerin
 
Tema 3 Tecno Audiovisual
Tema 3 Tecno AudiovisualTema 3 Tecno Audiovisual
Tema 3 Tecno Audiovisual
 
Instructions MINOX Wildfire DTC 600 | Optics Trade
Instructions MINOX Wildfire DTC 600 | Optics TradeInstructions MINOX Wildfire DTC 600 | Optics Trade
Instructions MINOX Wildfire DTC 600 | Optics Trade
 
Schwerpunktschule
SchwerpunktschuleSchwerpunktschule
Schwerpunktschule
 
U1
U1U1
U1
 
Fort- und Weiterbildungsmöglichkeiten für Lehrer
Fort- und Weiterbildungsmöglichkeiten für LehrerFort- und Weiterbildungsmöglichkeiten für Lehrer
Fort- und Weiterbildungsmöglichkeiten für Lehrer
 
Residuos
ResiduosResiduos
Residuos
 
3 Umpire-System (Fortgeschrittene)
3 Umpire-System (Fortgeschrittene)3 Umpire-System (Fortgeschrittene)
3 Umpire-System (Fortgeschrittene)
 
Tics En Educación
Tics En EducaciónTics En Educación
Tics En Educación
 
Mensaje de Palabra Rema 2010
Mensaje de Palabra Rema 2010Mensaje de Palabra Rema 2010
Mensaje de Palabra Rema 2010
 
Gandhi Elhombredelaverdaderaresistencia
Gandhi ElhombredelaverdaderaresistenciaGandhi Elhombredelaverdaderaresistencia
Gandhi Elhombredelaverdaderaresistencia
 

Ähnlich wie Apple iOS - Daten

Icinga 2009 at Nagios Workshop
Icinga 2009 at Nagios WorkshopIcinga 2009 at Nagios Workshop
Icinga 2009 at Nagios WorkshopIcinga
 
Auszug Seminarunterlagen "Tomcat 6.x"
Auszug Seminarunterlagen "Tomcat 6.x"Auszug Seminarunterlagen "Tomcat 6.x"
Auszug Seminarunterlagen "Tomcat 6.x"schellsoft
 
C# Workshop - File Operations
C# Workshop - File OperationsC# Workshop - File Operations
C# Workshop - File OperationsQiong Wu
 
Apple iOS - Webservices
Apple iOS - WebservicesApple iOS - Webservices
Apple iOS - Webservicesmesseb
 
HTML5 Storage
HTML5 StorageHTML5 Storage
HTML5 Storageadesso AG
 
Azure Data Factory – Data Management für die Cloud
Azure Data Factory – Data Management für die CloudAzure Data Factory – Data Management für die Cloud
Azure Data Factory – Data Management für die Cloudinovex GmbH
 
Volltextsuchen in RDBMS (2004)
Volltextsuchen in RDBMS (2004)Volltextsuchen in RDBMS (2004)
Volltextsuchen in RDBMS (2004)Gerrit Beine
 
SysDB – System DataBase — Ein Datenaggregator für System-Informationen
SysDB – System DataBase — Ein Datenaggregator für System-InformationenSysDB – System DataBase — Ein Datenaggregator für System-Informationen
SysDB – System DataBase — Ein Datenaggregator für System-InformationenSysDB Project
 
JSF und JPA effizient kombinieren (W-JAX 2011)
JSF und JPA effizient kombinieren (W-JAX 2011)JSF und JPA effizient kombinieren (W-JAX 2011)
JSF und JPA effizient kombinieren (W-JAX 2011)Michael Kurz
 
Fanstatic pycon.de 2012
Fanstatic pycon.de 2012Fanstatic pycon.de 2012
Fanstatic pycon.de 2012Daniel Havlik
 
MongoDB für Java-Programmierer
MongoDB für Java-ProgrammiererMongoDB für Java-Programmierer
MongoDB für Java-ProgrammiererUwe Printz
 
MongoDB für Java Programmierer (JUGKA, 11.12.13)
MongoDB für Java Programmierer (JUGKA, 11.12.13)MongoDB für Java Programmierer (JUGKA, 11.12.13)
MongoDB für Java Programmierer (JUGKA, 11.12.13)Uwe Printz
 
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatengeKarin Patenge
 
Docker-Images mit vorinstallierter Instanz einer Oracle-DB
Docker-Images mit vorinstallierter Instanz einer Oracle-DBDocker-Images mit vorinstallierter Instanz einer Oracle-DB
Docker-Images mit vorinstallierter Instanz einer Oracle-DBPeter Ramm
 
Datenbankzugriff mit der Java Persistence Api
Datenbankzugriff mit der Java Persistence ApiDatenbankzugriff mit der Java Persistence Api
Datenbankzugriff mit der Java Persistence ApiChristian Baranowski
 
Sesam (APEX) Öffne Dich
Sesam (APEX) Öffne DichSesam (APEX) Öffne Dich
Sesam (APEX) Öffne DichOliver Lemm
 
TechTalk - Share point for internet sites part 2
TechTalk - Share point for internet sites part 2TechTalk - Share point for internet sites part 2
TechTalk - Share point for internet sites part 2Samuel Zürcher
 

Ähnlich wie Apple iOS - Daten (20)

Icinga 2009 at Nagios Workshop
Icinga 2009 at Nagios WorkshopIcinga 2009 at Nagios Workshop
Icinga 2009 at Nagios Workshop
 
Auszug Seminarunterlagen "Tomcat 6.x"
Auszug Seminarunterlagen "Tomcat 6.x"Auszug Seminarunterlagen "Tomcat 6.x"
Auszug Seminarunterlagen "Tomcat 6.x"
 
C# Workshop - File Operations
C# Workshop - File OperationsC# Workshop - File Operations
C# Workshop - File Operations
 
Apple iOS - Webservices
Apple iOS - WebservicesApple iOS - Webservices
Apple iOS - Webservices
 
Node.js
Node.jsNode.js
Node.js
 
Windows Powershell
Windows PowershellWindows Powershell
Windows Powershell
 
HTML5 Storage
HTML5 StorageHTML5 Storage
HTML5 Storage
 
Azure Data Factory – Data Management für die Cloud
Azure Data Factory – Data Management für die CloudAzure Data Factory – Data Management für die Cloud
Azure Data Factory – Data Management für die Cloud
 
Volltextsuchen in RDBMS (2004)
Volltextsuchen in RDBMS (2004)Volltextsuchen in RDBMS (2004)
Volltextsuchen in RDBMS (2004)
 
Digitisation and Online Presentation of Archival Material
Digitisation and Online Presentation of Archival MaterialDigitisation and Online Presentation of Archival Material
Digitisation and Online Presentation of Archival Material
 
SysDB – System DataBase — Ein Datenaggregator für System-Informationen
SysDB – System DataBase — Ein Datenaggregator für System-InformationenSysDB – System DataBase — Ein Datenaggregator für System-Informationen
SysDB – System DataBase — Ein Datenaggregator für System-Informationen
 
JSF und JPA effizient kombinieren (W-JAX 2011)
JSF und JPA effizient kombinieren (W-JAX 2011)JSF und JPA effizient kombinieren (W-JAX 2011)
JSF und JPA effizient kombinieren (W-JAX 2011)
 
Fanstatic pycon.de 2012
Fanstatic pycon.de 2012Fanstatic pycon.de 2012
Fanstatic pycon.de 2012
 
MongoDB für Java-Programmierer
MongoDB für Java-ProgrammiererMongoDB für Java-Programmierer
MongoDB für Java-Programmierer
 
MongoDB für Java Programmierer (JUGKA, 11.12.13)
MongoDB für Java Programmierer (JUGKA, 11.12.13)MongoDB für Java Programmierer (JUGKA, 11.12.13)
MongoDB für Java Programmierer (JUGKA, 11.12.13)
 
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
 
Docker-Images mit vorinstallierter Instanz einer Oracle-DB
Docker-Images mit vorinstallierter Instanz einer Oracle-DBDocker-Images mit vorinstallierter Instanz einer Oracle-DB
Docker-Images mit vorinstallierter Instanz einer Oracle-DB
 
Datenbankzugriff mit der Java Persistence Api
Datenbankzugriff mit der Java Persistence ApiDatenbankzugriff mit der Java Persistence Api
Datenbankzugriff mit der Java Persistence Api
 
Sesam (APEX) Öffne Dich
Sesam (APEX) Öffne DichSesam (APEX) Öffne Dich
Sesam (APEX) Öffne Dich
 
TechTalk - Share point for internet sites part 2
TechTalk - Share point for internet sites part 2TechTalk - Share point for internet sites part 2
TechTalk - Share point for internet sites part 2
 

Apple iOS - Daten

  • 1. iOS Daten Sebastian Meßingfeld 23.05.2013 1© FH AACHEN | Sebastian Meßingfeld
  • 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 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. 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. 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- 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. 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 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. 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ä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. 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. Datenbanken 14© FH AACHEN | Sebastian Meßingfeld
  • 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. 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© FH AACHEN | Sebastian Meßingfeld „ ... Core Data is a schema-driven object graph management and persistence framework.“ Apple
  • 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. 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 von Core Data) 28© FH AACHEN | Sebastian Meßingfeld
  • 29. Aufgaben Objektmodell 29© FH AACHEN | Sebastian Meßingfeld
  • 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. 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. Aufgaben Befüllen der Persistierungsschicht unter 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/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. 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. App 41© FH AACHEN | Sebastian Meßingfeld
  • 42. FH Aachen Fachbereich Elektrotechnik & Informationstechnik Sebastian Meßingfeld 42© FH AACHEN | Sebastian Meßingfeld