Da Objective-C auf C basiert, kann man die C-API für den Zugriff auf eine MySQL-Datenbank nutzen.
Damit dies funktioniert, müssen jedoch die entsprechenden Header im Cocoa-Projekt mit verlinkt werden. Ausserdem muss die libz.dylib eingebunden werden.
Damit unsere Applikation die entsprechenden Header-Dateien und Bibliotheken finden kann, müssen sie in den Build-Settings eingestellt werden.
Dazu das aktive Target auswählen und oben im Reiter auf Build klicken.
Folgende Werte müssen geändert werden
Header Search Paths: Der Pfad zum include-Verzeichnis der MySQL-Installation (in der Regel »/usr/local/mysql/include«)
Library SearchPaths: Der Pfad zum lib-Verzeichnis der MySQL-Installation (in der Regel »/usr/local/mysql/lib«). Ausserdem sollte der Pfad zur libz.dylib («/usr/lib/libz.dylib«») angegeben werden.
Other Linker Flags:-lmysqlclient
Da leider das Einbinden der libz.dylib über nicht immer reicht, sollte man die aktuelle Version zum Projekt hinzfügen. Um die aktuelle Version heraus zu finden im Terminal mit cd /usr/lib in das Verzeichnis wechseln und dort dann ein ls -la durchführen, um sehen zu können, auf welche Datei der Symlink libz.dylib zeigt.
Nun im Finder mittels Gehe Zu > Gehe zum Ordner… in das Verzeichnis /usr/lib wechseln und die Datei in unser Cocoa-Projekt wechseln. Copy items into destination group’s folder (if needed) wählen und bestätigen.
Nun muss nur noch in den Klassen, in denen auf die Datenbank zugegriffen werden soll, die Header-Datei »mysql.h« importiert werden.
Anmerkung: der Build-Style Development verursacht oft Probleme, oder Fehlermeldungen. Diese treten jedoch im Deployment nicht auf. Daher wechsle ich meist direkt zu Deployment, da ich nur dort sehen kann, ob »richtige« Fehler vorhanden sind.
Aus aktuellem Anlass mal wieder ein mehrsprachiger Artikel ;)
Ich war dieses Mal ein wenig zu schnell, was das Veröffentlichen des neuen Releases angeht. Das Problem lag darin, dass es bei diesem Release einfacher war, (fast) komplett von vorne anzufangen, statt den alten Code zu verwenden, da das Projekt nun mit Bindings realisiert wurde.
Leider habe ich eine kleine, aber wichtige Funktion übersehen und somit erst jetzt eingebaut: das Verhalten des Fensters, wenn es erneut geöffnet wird.
Ich habe heute Nachmittag ein Update der Version auf Sourceforge gemacht.
Wer sich also die neue Version schon vorher geladen hat, sollte bitte ein Update machen und sich die 1.2 noch einmal laden.
English
Today I updated the version at sourceforge because of a little bug with the window’s reappereance after closing.
If you downloaded the 1.2 before, just reload it and install it over the existing one.
Da man mit Textpattern leider nicht gut multilingual arbeiten kann, ist dieser Beitrag halt in zwei Sprachen aufgebaut. Der Grund ist der, dass immer mehr Benutzer nach einer englischsprachigen Produktseite fragen.
Diese ist nun unter der Sourceforge-Projektseite erreichbar.
English
Because of the great request for an english documentation/project-site I created a Sourceforge project-site (incl. usage instructions).
For more information about All My Documents please follow the link above.
All My Documents 1.2 spricht nun auch wieder richtig Deutsch – wie genau der Fehler zustande kam, konnte ich bisher noch nicht nachvollziehen.
Die Lösung war einfach: ich habe den Inhalt der strings-Dateien einmal in Subethaedit geladen und das Encoding dort eingestellt. In XCode habe ich die Datei dann auf UTF-8 gestellt (komisch, dass damit Umlaute richtig kodiert werden) und nun geht es.
Ausserdem wurde noch der Bug im Drag‘N Drop-Verhalten behoben, so dass es nun auch wieder ohne Probleme funktioniert, ebenso wie das Löschen von Dateien, wenn eine Sortierung vorliegt.
Die neue Version liegt nun auch schon bei Sourceforge zum Download bereit.
Leider ist die deutsche Lokalisierung aufgrund eines Bugs?! in der neuen XCode-Version etwas verstümmelt — ich werde aber binnen der nächsten Tage ein Downgrade machen und dies somit beheben.
Neue Features
eine »Bibliothek« in der alle Dokumente angezeigt und durchsucht werden können
Dokumente durch Drag’n Drop hinzufügen
Mehrere Dokumente gleichzeitig verschieben, löschen oder öffnen
Für das nächste Release sind schon AppleScript-Support und (vielleicht) eine Vorschau-Version geplant.
Vor kurzer Zeit habe ich ein Update auf XCode 2.2 gemacht – eigentlich läft auch alles ganz prima. Als ich jetzt allerdings den letzten Schliff (Lokalisierung für die deutsche Sprache) hinzufügen wollte, kam das böse Erwachen: egal, welches Encoding ich gewählt habe, die Umlaute wurden einfach nicht dargestellt.
Im Netz habe ich dazu leider nichts entsprechendes gefunden. Ich bin für jeden Tipp sehr dankbar.
Ansonsten heisst es demnächst halt „Dokument oeffnen“, statt „Dokument öffnen“. – Sorry!
In der Regel hat man eine Liste von Objekten, deren Inhalt man darstellen möchte, in einem NSArray oder NSMutableArray gespeichert und greift über die Indizes auf die Inhalte zu, um sie in einer Tabelle oder ähnlichem Darzustellen.
[more]
Beispiel:
Man hat eine Klasse Adresse, in der Name, Vorname und Telefonnummer gespeichert werden (ich gebe zu, ich bin sehr kreativ, was Beispiele angeht ;) ).
In dieser Klasse werden nun nur die entsprechenden Member-Variablen angelegt und die dazugehörigen Getter- und Setter-Methoden.
@interface Adresse : NSObject {
NSString *_name;
NSString *_vorname;
NSString *_telefon; //Wir nehmen einen String, da auch Sonderzeichen enthalten sein können
}
Die Implementierung bleibt wieder einmal bei euch ;)
Um nun Intelligente Ordner für die Adressen anlegen zu können (z. B. alle Adressen, deren Name mit „Be“ beginnt, benötigen wir erst einmal eine Klasse für die Ordner:
@interface smartFolder : NSObject {
NSPredicate *_predicate; //Unser Predicate zur Filterung des Arrays
}
- (NSArray *)adressen; //Hier werden die gefilterten Adressen ausgegeben
@end
Um auf die Adressen zugreifen zu können, benötigen wir die jeweils aktuellen Adressen des AdressController. Also fügen wir in diesem eine statische Variable sharedAdressController hinzu, sowie eine Methode _+ (AdressController *)sharedAdressController_
//nach @implementation fügen wir eine statische Variable ein und weisen ihr den Wert nil zu
static sharedAdressController *sharedController = nil;
//in der Init-Methode weisen wir sharedAdressController uns selbst zu
- (id)init
{
Durch die Methode filteredArrayUsingPredicate: kann man ein Array mittels eines Ausdrucks (ähnlich SQL) filtern und so ein Array mit den entsprechenden Werten erhalten.
Wollen wir einen Intelligenten Ordner erstellen, der alle Adressen enthält, deren Name mit „Be“ beginnt, so könnten wir den Ausdruck SELF.name beginswith[c] 'be' verwenden.
Es können aber auch genauso Reguläre Ausdrücke oder die Operatoren < > || && usw verwendet werden.
Bei der Planung und Gestaltung des neuen Windows Vista, Nachfolger von XP, hat man sich anscheinend ein wenig von Mac OS X inspirieren lassen.
Nicht nur, dass die Oberfläche nun in einem hübschen neuen „Aqua-Look“ erscheint, selbst das Icon des Links The Experience auf der Produktseite sieht verdächtig nach einem iMac aus.
Natürlich musste man sich auch ein paar andere „neue“ Features einfallen lassen – z. B. eine Desktop-Suche mit Quick Search Box, oder Widgets, die einem das aktuelle Wetter anzeigen. Neu war mir in dieser Hinsicht, dass Mac OS X keine Widgets – dieser Begriff steht nämlich laut diesem Artikel für „Windows Gadgets“, sondern Gadgets hat (und davon ja angeblich auch nur 14). Vista heisst es wahrscheinlich nur, weil „IBM“ (Inspired By Mac) schon vergeben war ;)
Euer Feedback und aucch einige Feature-Request haben mich motiviert, AMD weiter zu entwickeln.
Ich denke, dass es Version 1.2 in den nächsten Tagen zu einem stabilen Release schafft.
Neue Funktionen sind unter anderem:
eine Bibliothek, in der alle Dateien angezeigt/durchsucht werden können
Dateien können aus dem Finder heraus direkt auf die »Dokument« – Tabelle gezogen werden — funktioniert auch mit mehreren Dateien
Dokument(e) hinzufügen öffnet einen Datei-Browser, mit dem sich eine oder mehrere Dateinen auswählen lassen
Warnung, wenn eine Datei bereits hinzugefügt wurde
mehrere Dateien gleichzeitig öffnen (bei Mehrfachauswahl)
Doppelklick auf die entsprechende Zeile öffnet die Datei — egal, welche Tabellenspalte man wählt
In den Einstellungen kann man wählen, welche Informationen (Pfad, Dateigröße, etc) man direkt in der »Dokumententabelle« angezeigt bekommen möchte
individuelle Icons für Kategorien
Bis jetzt wird die neue Version noch getestet und läft schon recht stabil. Sobald sie ausreichend getestet wurde wird sie hier natürlich zum Download bereitgestellt ;)
Für die nächsten Releases werden wahrscheinlich
eine Vorschaufunktion für Bilder, Textdateien (auch RTF) und PDF
individuelle Hintergrundfarben für Dokumente
Sortieren der Dokumente nach Tabellenspalten
anfallen. Neuigkeiten zu den aktuellen Releases kriegt ihr hier, oder auf der All My Documents bei Sourceforge
Ein Bild für das Web bereit zu stellen bedeutet in der Regel, es erst einmal in Photoshop, Gimp oder ähnlichem zu öffnen, es dort zu verkleinern oder zu beschneiden und nach dem Speichern ein FTP-Programm zu öffnen um das bearbeitete Bild hochzuladen.
Mac-Besitzer schaffen das durch Image Well deutlich schneller — in den Einstellungen einen oder mehrere FTP-Zugänge speichern, Bild auf das Icon im Dock ziehen, bearbeiten, aus der Liste den FTP-Account wählen und auf »senden« klicken.
Die Bilder können dabei nicht nur aus dem Finder, sondern auch aus anderen Programmen (z. B. Safari) durch Ziehen auf das Icon in Image Well geöffnet werden.
Update vom 30.11.2009: Imagewell ist mittlerweile keine Freeware mehr. Eine hübsche Alternative ist Skitch