Non ci sono stati errori fatali nel codice mostrato nell'OP, tuttavia il modo corretto di usare current date
, in questo caso, è lasciare che l'applicazione corrente lo faccia, non Promemoria, come in realtà sbaglia, ma recupera, quindi non è fatale. Tuttavia, si dovrebbe scrivere codice che non sta andando a vuoto errore. Quindi, prima del tell application "Reminders"
blocco di codice , imposta current date
su una variabile e usa la variabile all'interno del blocco di codice Promemoria , come mostrato nel codice più avanti.
Nota che personalmente non uso l'app Promemoria, tuttavia, passando da ciò che è esposto nel Dizionario AppleScript di Reminders, le seguenti proprietà , non contrassegnate come r/o
, sono quelle che possono essere modificate a livello di codice per reminder
classe .
name (text) : the name of the reminder
id (text, r/o) : the unique identifier of the reminder
body (text) : the notes attached to the reminder
completed (boolean) : Is the reminder completed?
completion date (date) : the completion date of the reminder
container (list, r/o) : the container of the reminder
creation date (date, r/o) : the creation date of the reminder
due date (date) : the due date of the reminder
modification date (date, r/o) : the modification date of the reminder
remind me date (date) : the remind date of the reminder
priority (integer) : the priority of the reminder
Come test, ho creato un promemoria chiamato "Test" e impostato la ricordami [√] casella di controllo a data di ieri , in modo da conformarsi con il parametro di ricerca nel codice più sotto.
Quindi, in Script Editor, ho usato la seguente riga di code per ottenere le sue proprietà .
tell application "Reminders" to get properties of reminder named "Test"
Ha restituito:
-
{due date:date "Saturday, September 10, 2016 2:00:00 PM", modification date:date "Sunday, September 11, 2016 1:49:35 PM", class:reminder, body:missing value, completed:false, completion date:missing value, id:"3F0EF538-5DF6-4F1C-8024-922B5D45EB9B", name:"Test", container:list id "9EB58C9B-EF63-4B72-88C3-A4FFA3C7272F" of application "Reminders", priority:0, creation date:date "Sunday, September 11, 2016 1:49:13 PM", remind me date:date "Saturday, September 10, 2016 2:00:00 PM"}
Ho quindi deselezionato manualmente la casella di controllo ricordami [] e ho eseguito di nuovo il ... get properties ...
codice .
Ha restituito:
-
{due date:missing value, modification date:date "Sunday, September 11, 2016 1:49:35 PM", class:reminder, body:missing value, completed:false, completion date:missing value, id:"3F0EF538-5DF6-4F1C-8024-922B5D45EB9B", name:"Test", container:list id "9EB58C9B-EF63-4B72-88C3-A4FFA3C7272F" of application "Reminders", priority:0, creation date:date "Sunday, September 11, 2016 1:49:13 PM", remind me date:missing value}
La differenza principale tra i due è stata la prima e l'ultima elementi nella lista , ovvero due date
e remind me date
, passati da due date:date "Saturday, September 10, 2016 2:00:00 PM"
a due date:missing value
con lo stesso per remind me date
, avendo anche remind me date:missing value
.
Quindi ho provato il codice sotto usando entrambe le preferenze , due date
e remind me date
solo per vedere se c'era qualche differenza e non c'era, come rimozione uno rimosso l'altro.
Il seguente codice rimuoverà sia due date
che remind me date
da qualsiasi promemoria più vecchio di current date
e non è stato contrassegnato completed
, a quando viene eseguito il codice , poiché questo è ciò che accade, almeno per le proprietà di reminder
, in uno si deseleziona manualmente mi ricorda [ ] casella di controllo .
set curDate to current date
tell application "Reminders"
activate
set myRemList to every reminder whose due date is less than curDate as list
repeat with myitem in myRemList
if completed of myitem is false then
delete remind me date of myitem
end if
end repeat
end tell
Il codice sopra può anche essere scritto come mostrato di seguito. Questo è in realtà un modo migliore per scriverlo, poiché rende un elenco più piccolo restituito perché crea solo un elenco di elementi ( reminders
) che non hanno ancora stato contrassegnato come completato . Dopo tutto, quelli già contrassegnati come completati non attiveranno un "allarme".
set curDate to current date
tell application "Reminders"
activate
set myRemList to every reminder whose completed is false and due date is less than curDate as list
repeat with myitem in myRemList
delete remind me date of myitem
end repeat
end tell
In base al tuo OP modificato, se questo non fa ciò che è necessario, allora non so cos'altro posso offrire, dato che posso lavorare solo con ciò che proprietà è esposto e modificabile.
Nota: non ero in grado di riprodurre il promemoria come mostrato nella tua modifica, cioè la riga che inizia con "due" direttamente sotto la casella di controllo [] At a Location e sopra "ripeti Nessuno ". Tuttavia, ciò che ora viene offerto come risposta a "rimuovere tutti gli avvisi di tutti i promemoria scaduti con AppleScript su OS X" simula l'azione manuale di deselezionare la casella di controllo ricordami [] , che è ciò che hai chiesto ora tramite la modifica apportata all'OP. Spero che questo risolva il tuo problema.