2012-12-11 21 views
11

Ho appena aggiunto il supporto iCloud a un'app a cui sto lavorando. Funziona alla grande, tranne che quando apro l'applicazione senza un documento a fuoco appare la finestra di dialogo di apertura del file iCloud e non la voglio!iCloud abilitato - Interrompe la visualizzazione del file aperto all'avvio dell'applicazione?

Nella mia app delegato ho:

- (BOOL) applicationShouldOpenUntitledFile:(NSApplication *)sender 
{ 
    [mainWindowController.window makeKeyAndOrderFront:self]; 
    return NO; 
} 

che io uso per mostrare la mia finestra personalizzata. Tuttavia ora vengono visualizzate sia la finestra di dialogo del file aperto iCloud sia la mia finestra di dialogo. Qualche idea su come posso sbarazzarmi della finestra di dialogo di iCloud?

Default Window

+0

Qualcuno ha risolto questo problema? Ci sono 3 domande nello stack overflow su questo, e nessuna delle risposte ha funzionato per me. – coolcool1994

risposta

0
- (BOOL) applicationShouldOpenUntitledFile:(NSApplication *)sender 
{ 
    [mainWindowController.window makeKeyAndOrderFront:self]; 
    return NO; 
} 

questo componente e 'corretto. L'ho appena provato

Assicurati solo che questa classe sia davvero il tuo delegato dell'app.

  1. fare una nuova classe chiamata prefixAppDelegate
  2. Nella tua MainMenu.xib, trascinare un nuovo oggetto di lato e set è classe personalizzata alla classe app delegato
  3. Fare clic destro Applicazione e trascinate dal Delegare fino all'oggetto delegato dell'app.
  4. Ora basta incollare il codice di cui sopra nella vostra app classe delegato

Se questo ancora non risolve il problema, prova ad accedere a qualcosa applicationShouldOpenUntitledFile:.

Inoltre, si consiglia di non impostare [mainWindowController.window makeKeyAndOrderFront:self]; in questo metodo. È preferibile utilizzare il metodo del delegato dell'app applicationDidFinishLaunching:.

+0

applicationShouldOpenUntitledFile non viene chiamato e invece viene aperta la finestra del file iCloud (foto nella domanda originale). Se disattivo iCloud nelle funzionalità, tutto funziona come previsto. Ma ho bisogno della funzionalità iCloud e ignora questo file pop-up. – coolcool1994

-1

mi sono imbattuto in un problema simile - si è scoperto che nel mio caso, ho dovuto togliere la chiave e il valore NSDocumentClass dal mio Info.plist nella matrice CFBundleDocumentTypes. Solo allora il metodo applicationShouldOpenUntitledFile: verrà chiamato e quindi mi consentirà di impedire l'apertura della finestra di iCloud/Documento.

+0

Disabilitando questa funzione, l'applicazione basata su documenti smette di funzionare. – coolcool1994

0

La mia osservazione e correzione: [applicationShouldOpenUntitledFile:] non verrà eseguita tranne la chiave NSDocumentClass rimossa da * -info.plist. Ma questo è dannoso se la tua app è un'applicazione basata su documenti, non aprirà il tipo di documento che hai collegato. applicazioni

La mia soluzione è aprire la mia finestra personalizzata direttamente nel -(void)applicationWillFinishLaunching:(NSNotification *)notification metodo (Application delegato)

ETDocumentWindowController *windowController = (ETDocumentWindowController*)get your own window controller here...; 
[windowController.window makeKeyAndOrderFront:nil]; 
2

https://developer.apple.com/library/prerelease/content/releasenotes/AppKit/RN-AppKitOlderNotes/index.html

NSDocument supporto per iCloud

In 10,8, NSDocument basata-con La titolarità di ubiquity-container-identifier acquisisce nuove funzionalità e UI per facilitare la gestione dei documenti iCloud.

Quando iCloud è abilitato e un'applicazione viene prima lanciata o riattivata e nessuna finestra è visibile o in fase di ripristino, invece di creare un nuovo documento senza titolo, NSDocumentController visualizzerà un pannello aperto non modale che mostra la libreria iCloud dell'utente.

...

Le applicazioni che non desiderano utilizzare queste funzionalità per qualsiasi o tutti i loro sottoclassi NSDocument può ignorare + [NSDocument usesUbiquitousStorage] e tornare NO. Se tutte le sottoclassi NSDocument dichiarate dell'applicazione restituiscono NO da questo metodo, NSDocumentController non mostrerà mai il nuovo pannello aperto non modale.

Quindi, se si può rinunciare utilizzando le funzioni elencate in questa nota di rilascio, return NO a +[NSDocument usesUbiquitousStorage]. Ho confermato che puoi ancora aprire/salvare il tuo file nella memoria di iCloud dalla normale finestra di dialogo.

+1

Questo non funziona. usesUbiquitousStorage è una variabile getter. Non è possibile sovrascrivere questo metodo o impostarlo. E se disabiliti questo in qualche modo disabiliterebbe iCloud. Ho bisogno di un modo per aggirare questo schermo con iCloud abilitato. – coolcool1994

+0

@ coolcool1994 Se si definisce la classe NSDocument, è ovviamente possibile sovrascriverla. Potrei ancora usare iCloud come ho commentato, ma potrebbero esserci parametri nascosti per controllare ciò che non ho potuto notare. Ho controllato questo su Yosemite a Sierra. – ioue

1

Inserendo i codici seguenti nell'app Delegato consente di ignorare che iCloud fa apparire la schermata Nuovo documento. Testato per l'alta Sierra.

-(void)applicationDidFinishLaunching:(NSNotification *)notification 
{ 
    // Schedule "Checking whether document exists." into next UI Loop. 
    // Because document is not restored yet. 
    // So we don't know what do we have to create new one. 
    // Opened document can be identified here. (double click document file) 
    NSInvocationOperation* op = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(openNewDocumentIfNeeded) object:nil]; 
    [[NSOperationQueue mainQueue] addOperation: op]; 
} 

-(void)openNewDocumentIfNeeded 
{ 
    NSUInteger documentCount = [[[NSDocumentController sharedDocumentController] documents]count]; 

    // Open an untitled document what if there is no document. (restored, opened).  
    if(documentCount == 0){ 
     [[NSDocumentController sharedDocumentController]openUntitledDocumentAndDisplay:YES error: nil]; 
    } 
}