• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

AppleScript, Snow Leopard und „missing value“

bezierkurve

Halberstädter Jungfernapfel
Registriert
12.06.05
Beiträge
3.860
Moin,

vorweg: ich bin kein AppleScript-Pro. Mir fiel aber soeben auf, dass mein Geburtstags-Erinnerungs-Growl-Script unter Snow Leopard nicht mehr funktioniert. Übeltäter scheint „missing value“ zu sein:

Folgendes hat seither funktioniert, um durch alle Kontakte mit gesetztem Geburtstagseintrag zu iterieren (Mininalbeispiel):
Code:
tell application "Address Book"
	repeat with currentPerson in (people whose birth date is not missing value)
		name of currentPerson
	end repeat
end tell

… liefert jetzt aber den Fehler:
Code:
error "„Address Book“ hat einen Fehler erhalten: missing value kann nicht in Typ date umgewandelt werden." number -1700 from missing value to date

… so funktioniert’s dagegen:
Code:
tell application "Address Book"
	repeat with currentPerson in people
		if birth date of currentPerson is not missing value then
			name of currentPerson
		end if
	end repeat
end tell

Ist das ein Bug meinerseits? Oder seitens Apple? Oder beabsichtigt?


[edit] Ich bin mit dieser Beobachtung wohl nicht der erste.
 

LittlePixel

Strauwalds neue Goldparmäne
Registriert
09.07.08
Beiträge
641
Hallo,

das es so nicht mehr geht würde ich auch gutheißen.
Die Schleife ist nämlich eine üble Schweinerei ;)
Bei jedem Durchgang sendest Du neu eine neue gefilterte Abfrage. Da sind Fehler eigentlich auch vorprogrammiert. Verändere mal ein "birth date" innerhalb der Schleife.
Wo und wie sollte den die Schleife weitermachen? Ein total undefiniertes Szenario, das da entsteht.

Erst eine Abfrage senden und dann das Ergebnis durchlaufen. So sollte man das umsetzen ;)

Ich sehe das nicht als Bug, sondern als Umsetzung von mehr klaren Strukturen.
(Wenn es wirklich so ist, wie Du beschreibst)

Viele Grüße
 
  • Like
Reaktionen: bezierkurve

bezierkurve

Halberstädter Jungfernapfel
Registriert
12.06.05
Beiträge
3.860
Erst eine Abfrage senden und dann das Ergebnis durchlaufen. So sollte man das umsetzen ;)

Hi LittlePixel,

erst mal besten Dank für den Hinweis. Somit läuft das Skript gleich mal um einen gefühlten Faktor hundert schneller. Nicht auszudenken, was ich da über die Jahre an Rechenzeit verbraten habe :eek: .

Der Punkt mit dem „missing value“ besteht jedoch nach wie vor, so führt auch folgender Ausschnitt zu oben erwähntem Fehler …:

Code:
set personsToCheck to (people whose birth date is not missing value and id is not my myId)

Grüße,
bezierkurve.
 

LittlePixel

Strauwalds neue Goldparmäne
Registriert
09.07.08
Beiträge
641
Durchlaufe mal die Personen einzeln.
Lasse Dir dann das Datum z.B. mit einem Alert ausgeben.

Was steht dann bei einem, dass Deiner Meinung nach "missing value" haben sollte?
Ich vermute fast so etwas wie 00.00.00 00:00.

Wenn Dir nämlich der Ist-Zustand klar ist, dann kannst Du auch daraufhin Deine Abfrage neu gestalten.

Viele Grüße
 

bezierkurve

Halberstädter Jungfernapfel
Registriert
12.06.05
Beiträge
3.860
Hey,

Was steht dann bei einem, dass Deiner Meinung nach "missing value" haben sollte?
Ich vermute fast so etwas wie 00.00.00 00:00.

… nein, in diesem Fall kommt da tatsächlich „missing value“ raus (das sind diese Einträge im Adressbuch, bei denen kein Geburtsdatum gesetzt ist).
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Hallo bezierkurve! :)

Leider kann ich so schlecht erklären. Ausserdem habe ich nur Halbwissen.
Trotzdem: Dein ursprüngliches Skript war ja sowieso nicht gut, wie von Little Pixel ja schon dargelegt.
Ich empfehle auch, wenn möglich auf << every xx whose yy is zz >> zu verzichten, da das in einigen Anwendungen nicht ordnungsgemäß funktioniert, und zwar schon seit Tiger (weiter kann ich nicht zurückdenken). Da gab es mal den lapidaren Satz von Apple: " … not working in current version …" (oder so ähnlich)

und stattdessen die Daten, wenn nötig, mit einer Schleife abzuarbeiten.
Code:
people whose birth date is not missing value
ist also nicht gut.
Warum es aber nicht geht, liegt weder am oben genannten und auch nicht an missing value sondern an birth date
Öffne doch mal das Funktionsverzeichniss von Adressbuch und suche birth date!
Dann siehst Du auch, warum folgendes Beispiel geht
Code:
people whose last name is not missing value
 
  • Like
Reaktionen: bezierkurve