2009-07-22 4 views
1

Ich habe eine Hintergrund-App, die über einen Einstellungsbereich in den Systemeinstellungen gesteuert wird. Um zwischen Pre-Bereich und App zu kommunizieren, verwende ich verteilte Benachrichtigungen. Benutzerstandardeinstellungen werden über [NSUserDefaults addSuiteNamed:] freigegeben. Das alles funktioniert sehr gut.UserDefaults in Systemeinstellungen für mehrere Benutzer in OSX installiert

Das Problem tritt auf, wenn der Benutzer den Pref-Bereich "für alle Benutzer" installiert, wenn er vom System-Einstellungsfenster dazu aufgefordert wird. In diesem Fall werden die Einstellungen wie unter "nur für diesen Benutzer" beschrieben in ~/Library/Preferences/ geschrieben. (Ich denke, das ist das richtige Verhalten.) Wenn das Prepbene jedoch einen Standardschlüssel liest, scheint das Prepane auf /Library/Preferences/ zu schauen, nicht im Home-Verzeichnis des Benutzers.

Um es zusammenzufassen:

  • Prefs in installiert Bereich ein: ~/Library/PreferencePanes/
    • Defaults geschrieben: ~/Library/Preferences/
    • aus lesen Defaults: ~/Library/Preferences/
  • prefs Scheibe in installiert:/Library/PreferencePanes/
    • Defaults geschrieben: ~/Library/Preferences/
    • aus lesen Defaults:/Library/Preferences/

jemand etwas Licht, wo die Dinge schief gehen vergießen kann?

Danke, Kolja

Antwort

3

Sie haben im Wesentlichen den gleichen Aufbau wie Growl. Wir verwenden CFPreferences zum Lesen und Schreiben der Benutzereinstellungen. Siehe GrowlPreferencesController und the macros in GrowlDefinesInternal.h. Die verteilte Benachrichtigung bewirkt, dass sowohl die Hintergrund-App als auch das Voreinstellungsfenster die Einstellungen erneut lesen.

(Sie sich nicht ganz nehmen, so weit wie wir es tun, wenn-es ist in Ordnung NSNumber, NSDictionary usw. mit Core Foundation zu verwenden, und es ist viel einfacher zu lesen.)

+0

Ist das Header-Datei Standard-C oder betrachte ich Objective-C? Ich bin hauptsächlich wegen all der Funktionsmakros neugierig - warum schreiben Leute, die C (oder Objective-C?) Schreiben, so viel mit Funktionsmakros, anstatt nur eine Funktion zu schreiben? Ich bin ziemlich versiert in C, aber meine erste Programmiersprache war Java; Folglich finde ich C-Funktionsmakros ziemlich skizzenhaft. Vielleicht können Sie nur für sich selbst sprechen, aber ich bin neugierig, von einem seriösen Entwickler zu hören. –

+0

Es ist beides. Es passt sich jedem "# included" oder "#" -Import an. Was die Makros angeht, ich weiß nicht, warum die Person, die sie geschrieben hat, sie zu Makros gemacht hat; sie können sehr gut als Funktionen besser sein. –

+0

Ich arbeitete bereits an Quellcode basierend auf Growl, den ich vor zwei Jahren geschrieben habe. Ich habe meine Quellen auf die Art aktualisiert, wie Growl mit dem Zeug umgeht. Das Problem ist, dass die Einstellungen immer noch nicht funktionieren, wenn das Prepane für alle Benutzer installiert ist. Kannst du bestätigen, dass die Growl-Quelle mit dieser Situation umgehen kann, weil growl mit einem Installer kommt, der dir nicht die Wahl lässt, das Prepane für alle Benutzer zu installieren. – Monobono

Verwandte Themen