1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

AppleScript, Snow Leopard und „missing value“

Dieses Thema im Forum "AppleScript" wurde erstellt von bezierkurve, 06.09.09.

  1. bezierkurve

    bezierkurve Danziger Kant

    Dabei seit:
    12.06.05
    Beiträge:
    3.861
    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.
     
  2. LittlePixel

    LittlePixel Strauwalds neue Goldparmäne

    Dabei seit:
    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
     
    bezierkurve gefällt das.
  3. bezierkurve

    bezierkurve Danziger Kant

    Dabei seit:
    12.06.05
    Beiträge:
    3.861
    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.
     
  4. LittlePixel

    LittlePixel Strauwalds neue Goldparmäne

    Dabei seit:
    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
     
  5. bezierkurve

    bezierkurve Danziger Kant

    Dabei seit:
    12.06.05
    Beiträge:
    3.861
    Hey,

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

    sedna Pomme Etrangle

    Dabei seit:
    22.10.08
    Beiträge:
    911
    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
     
    bezierkurve gefällt das.

Diese Seite empfehlen