Pagine

2012-01-03

Core Data e Xcode 4.2

Ho incontrato questo problema recentemente: fino ad allora avevo usato Xcode 4 solo per aggiornare progetti nati su Xcode 3; ma da poco sono partito da zero con un nuovo progetto basato su Core Data. Ho provato e riprovato, re-installato da zero Xcode 4 dopo aver rimosso tutto con lo script da terminale consigliato da Apple, ma il risultato ora è definitivo: Un progetto Core Data nato su Xcode 4.2.1 non è completo e genera un'applicazione con i seguenti problemi:

I comandi Undo/Redo non funzionano

Le azioni di Undo e Redo, che Core Data fornisce in automatico, non sono disponibili; o meglio: lo stack di Undo/Redo viene mantenuto correttamente, ma le voci di menu sono sempre disabilitate. Ho provato a collegare il binding Enable al metodo canUndo dell'UndoManager: in effetti il menu si abilita, ma selezionandolo non succede nulla. L'ultimo tentativo è stato di collegare il menu ad una azione che chiamasse esplicitamente il metodo giusto:
[[self.managedObjectContext undoManager] undo]
Funziona, ma quando si va su un'altra finestra, per esempio con possibilità di editing testuale, quel menu continua (giustamente) a chiamare l'UndoManager di Core Data, rischiando seriamente il crash dell'applicazione e comunque ottenendo una cosa diversa.

Non è possibile nominare le azioni di Undo

Poca cosa, visto comunque che l'Undo non funziona...; comunque il messaggio
[[self.managedObjectContext undoManager] setActionName:@"Edit"]
non ha alcun effetto, anche se abilito il menu in qualche modo. Probabilmente è conseguenza del primo punto.

Il menu Save non è collegato all'azione SaveAction

Questo si risolve velocemente, collegando il menu all'IBAction; in Xcode 3 questo arrivava già pronto. Un volta collegato, il menu si abilita correttamente quando è necessario salvare i dati.

Il Persistent Store punta alla Libreria dell'utente, invece che all'Application Support

Anche questo potrebbe essere corretto in modo semplice: nel metodo dell'AppDelegate
- (NSURL *)applicationFilesDirectory
basta sostituire il parametro NSLibraryDirectory con NSApplicationSupportDirectory.

Il vero problema, non risolvibile per quanto ne so, è comunque quello del funzionamento dell'Undo; la prova del nove l'ho avuta riesumando Xcode 3, creando un progetto nuovo e poi aprendo lo stesso progetto da Xcode 4: tutto è tornato a funzionare!
Quindi per ora non gettate via Xcode 3; oltre tutto possono convivere entrambi sullo stesso hard disk (prima bisogna installare la versione 3 e poi la 4, altrimenti la cosa non funziona).

Ho posto il problema ad alcuni forum, ma non ho trovato risposte, nemmeno chiamando in aiuto Google; potrebbe anche essere un problema di concomitanza tra qualche baco e la versione italiana di Lion.
Se qualcuno ha notizie in proposito, lasciate un commento.
--------
Aggiornamento (dicembre 2012)
La versione attuale di Xcode ha finalmente risolto tutti i problemi elencati, escluso il mancato collegamento del menu Save; per fortuna questo è risolvibile impostando il collegamento mancante.
Nel frattempo, si sono rivelati altri bachi in Xcode, non certo al normale livello di qualità dei software Apple; per citarne uno, scordatevi di impostare una animazione usando l'interfaccia: non potrete più toglierla (se lo faccio, Xcode emette un ottimo errore e si chiude...)

Nessun commento:

Posta un commento