Xcode
NSTableView Bindings mit Core Data
19/03/17 15:08
Seit einiger Zeit ist die Standard-Einstellung bei der Erzeugung von NSTableViews mit Xcode für den Content Mode "View Based", nicht mehr "Cell Based". Cell-based Table Views sollen nicht mehr verwendet werden. Die Bindings von View-based Table Views sind aber etwas unübersichtlich. Damit ich das nicht immer vergesse, hier die Anleitung:
Das für alle Spalten durchführen, dann sollte es klappen. Hier im Beispiel heißt der Array Controller
- Einen Array Controller in das XIB ziehen und bei den Attributen den
Mode
aufEntity Name
stellen und den Entity Name eingeben. Dann bei den Bindings denManaged Object Context
auf den vonFile's Owner
setzen:
- Eine Spalte im Table View selektieren und dann den
Value
im Bindings Inspector auf das gewünschte Attribut derArranged Objects
des Array Controllers stellen (wenn man die Table View selbst an den Controller anbindet, klappt das Selektieren nicht mehr):
- Das
NSTextField Table View Cell
(nichtTable Cell View
) auswählen und im Bindings Inspector dasValue
anobjectValue.meinAttribut
desTable Cell View
s binden:
Das für alle Spalten durchführen, dann sollte es klappen. Hier im Beispiel heißt der Array Controller
Messreihe Controller
, meinAttribut
ist temperatur
.LAPACK auf dem Mac nutzen
16/06/13 12:10
LAPACK (Linear Algebra PACKage) ist eine Bibliothek zur Berechnung von linearen Gleichungssystemen. Sie ist in Fortran 90 geschrieben, hocheffizient, ausgereift und nutzt typische Eigenschaften und Fähigkeiten moderner Computer (Multi-Threading, Vektoreinheiten, Mehrprozessorsysteme). Auf dem Mac ist sie Teil des Betriebssystems OS X, sie fällt nur nicht so auf.
LAPACK ist Teil des Accelerate-Frameworks, das noch weitere Bibliotheken zur Daten- und Bildbearbeitung enthält, wie z.B. BLAS. Die Nutzung von LAPACK in eigenen Programmen ist einfach, wenn man erst einmal weiß, das sie schon da ist und wie sie eingebunden wird. Die LAPACK-Version, die in Mac OS X 10.8.4 (Mountain Lion) installiert ist, ist v3.2.1. Die aktuelle Version von LAPACK ist momentan 3.4.2. Wer also wirklich die neueste Version braucht, muss erst gfortran und BLAS installieren und damit LAPACK kompilieren und installieren. Das ist nicht so einfach, darum lassen wir das.
Um also LAPACK in einem C/C++/Objective C-Programm, dass in Xcode (v4.6.x) entwickelt wird, nutzen zu können, geht man folgendermaßen vor:
Die LAPACK-Routinen enthalten Input- und Output-Parameter in der Parameterliste. Da in C nur By Value übergeben werden kann, müssen die Output-Parameter als Zeiger übergeben werden. In CLAPACK werden aber alle Parameter als Zeiger übergeben. Wie dem Header auch zu entnehmen ist, ist z.B. die Routine DGELS so definiert:
int dgels_(char *trans, __CLPK_integer *m, __CLPK_integer *n, __CLPK_integer *
nrhs, __CLPK_doublereal *a, __CLPK_integer *lda, __CLPK_doublereal *b, __CLPK_integer *ldb,
__CLPK_doublereal *work, __CLPK_integer *lwork, __CLPK_integer *info) __OSX_AVAILABLE_STARTING(__MAC_10_2,__IPHONE_4_0);
Das DGELS-Beispiel aus der Anleitung "The LAPACK C Interface to LAPACK", dort für LAPACK C Interface beschrieben, sieht dann für CLAPACK so aus:
Weitere Informationen zu LAPACK auf dem Mac und dem Accelerate-Framework findet man auch im Xcode-Organizer, wenn man dort nach "Accelerate" sucht.
LAPACK ist Teil des Accelerate-Frameworks, das noch weitere Bibliotheken zur Daten- und Bildbearbeitung enthält, wie z.B. BLAS. Die Nutzung von LAPACK in eigenen Programmen ist einfach, wenn man erst einmal weiß, das sie schon da ist und wie sie eingebunden wird. Die LAPACK-Version, die in Mac OS X 10.8.4 (Mountain Lion) installiert ist, ist v3.2.1. Die aktuelle Version von LAPACK ist momentan 3.4.2. Wer also wirklich die neueste Version braucht, muss erst gfortran und BLAS installieren und damit LAPACK kompilieren und installieren. Das ist nicht so einfach, darum lassen wir das.
Um also LAPACK in einem C/C++/Objective C-Programm, dass in Xcode (v4.6.x) entwickelt wird, nutzen zu können, geht man folgendermaßen vor:
- Neues Projekt erstellen, hier als Beispiel C Command Line Tool:
- Accelerate-Header einfügen (dieser Header fasst alle Header der enthaltenen Bibliotheken zusammen):
- Accelerate-Framework einbinden (beim Target in der Build Phase "Link Binary With Libraries" mit dem "+" hinzufügen):
- Gewünschte LAPACK-Funktionen aufrufen. Dabei ist zu beachten, dass die LAPACK-Version von Mac OS X eine f2c-übersetzte Version ist und die Beispiele auf der LAPACK-Website zur Nutzung mit C nicht direkt funktionieren. Die Routinen sind anders benannt: Um z.B. die Fortran-Routine DGETRF aufzurufen, muss man nicht LAPACKE_dgetrf nutzen, sondern dgetrf_() . Die Deklarationen der Funktionen findet man im Header clapack.h, den man im Accelerate-Framework findet (Accelerate.framework/Frameworks/vecLib.framework/Headers):
Die LAPACK-Routinen enthalten Input- und Output-Parameter in der Parameterliste. Da in C nur By Value übergeben werden kann, müssen die Output-Parameter als Zeiger übergeben werden. In CLAPACK werden aber alle Parameter als Zeiger übergeben. Wie dem Header auch zu entnehmen ist, ist z.B. die Routine DGELS so definiert:
int dgels_(char *trans, __CLPK_integer *m, __CLPK_integer *n, __CLPK_integer *
nrhs, __CLPK_doublereal *a, __CLPK_integer *lda, __CLPK_doublereal *b, __CLPK_integer *ldb,
__CLPK_doublereal *work, __CLPK_integer *lwork, __CLPK_integer *info) __OSX_AVAILABLE_STARTING(__MAC_10_2,__IPHONE_4_0);
Das DGELS-Beispiel aus der Anleitung "The LAPACK C Interface to LAPACK", dort für LAPACK C Interface beschrieben, sieht dann für CLAPACK so aus:
Weitere Informationen zu LAPACK auf dem Mac und dem Accelerate-Framework findet man auch im Xcode-Organizer, wenn man dort nach "Accelerate" sucht.
Xcode 4.3 stürzt beim Start des Debuggers ab
17/07/12 17:54
Mit einem Projekt, dass als Target Mac OS X 10.6 hat und den Default Compiler (Apple LLVM Compiler 3.1) nutzt, hatte ich mehrmals das Problem, dass beim Starten des Debuggers Xcode abstürzt. Gleiches Verhalten mit Xcode 4.3.2 und 4.3.3. Der Crash Report schlägt vor, Xcode neu aus dem App Store zu laden. Nutzt aber nichts. Auch ein Clean Build, Neustart des Rechners etc. nutzt nichts. Was aber hilft, ist, GCC_VERSION von Apple LLVM Compiler 3.1 auf LLVM GCC 4.2 umzuschalten und das Target neu zu kompilieren. Dann kann man mit diesem Code debuggen, aber auch wieder zurück umstellen, neu kompilieren und mit der gewünschten Default-Konfiguration weiterarbeiten.