Posso usare UIDocument in un'applicazione per Mac OSX?
-
26-10-2019 - |
Domanda
Vorrei condividere un formato di documento comune tra iOS e OSX. Si noti che questa non è un'applicazione MDI; ci sarà mai un documento di salvare / caricare. Non è necessario NSDocument stile guidata dall'utente gestione (es .. Salva, Salva con nome, Open ecc).
La sfida più grande è non sembra esserci alcun formato di codifica documento comune naturalmente compatibile con OSX e IOS (ancora). Secondo applicazioni basati su documenti Guida alla programmazione per iOS, sembra che la codifica / decodifica è necessaria la conversione tra NSDocument e UIDocument classi derivate. Vorrei che ci sia un meccanismo di serializzazione universale, compatibile con tutti i dispositivi in ??tutto l'ecosistema Apple. Tutti i pensieri, le idee, i suggerimenti sono apprezzati in questo senso.
È possibile utilizzare una classe derivata UIDocument nella mia applicazione osx mac e il documento diventa compatibile con iOS?
Soluzione
No, non è possibile utilizzare o sottoclasse UIDocument in un'applicazione Cocoa perché UIDocument non esiste in Cocoa.
In entrambi NSDocument e UIDocument, si determina il formato che si intende utilizzare. Così, proprio la loro attuazione sia di utilizzare lo stesso formato per l'uscita e l'ingresso.
Non sarebbe troppo difficile da usare il preprocessore per impostare un file-pair che implementa una sottoclasse di NSDocument quando si costruisce per il Mac e UIDocument quando si costruisce per iOS. Ciò eviterebbe di dover non corrispondenti di serializzazione e deserializzazione implementazioni, in quanto si avrebbe una sola copia di ogni e di essere di utilizzarlo su entrambe le piattaforme.
Altri suggerimenti
La risposta di Pietro sopra è corretto, ma ho un suggerimento che non coinvolge il C pre-processore (non disponibile in Swift), che è un po 'più di cacao-like.
Guarda il WWDC 2014 sessione 233 impostare il vostro iOS e Mac apps in un unico progetto come obiettivi separati, quindi utilizzare le categorie sulla classe di documento per implementare la funzionalità comune:
CommonFunctions.h
@interface AppDocument (CommonFunctions)
- (void)function;
@end
-
CommonFunctions.m
@implementation AppDocument (CommonFunctions)
- (void) function {
/// stuff here
}
@end
La classe AppDocument
avrebbe 2 diverse classi che ereditano da UI / NSDocument come necessario per ogni piattaforma / target, e ogni bersaglio tirava nelle categorie da un luogo comune.