2012-12-11 11 views
11

私は、私が取り組んでいるアプリケーションにiCloudサポートを追加しました。その作業の素晴らしい点は、iCloudの開いているファイルのダイアログが表示されているため、ドキュメントを表示していない状態でアプリケーションを開いたときに表示されないことです。私は自分のカスタムウィンドウを表示するために使用iCloud enabled - アプリケーションの起動時に開いているファイルを表示しないようにしますか?

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

:私は私のアプリデリゲートで

。ただし、iCloudのファイルを開くダイアログと自分のダイアログが表示されます。どのようにiCloudのダイアログを消すことができるかについてのアイデアはありますか?

Default Window

+0

誰でもこの問題を解決しましたか?これについてのスタックオーバーフローには3つの質問があり、答えはどれも私のために働かなかった。 – coolcool1994

答えて

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

この部分は正しいです。私はちょうどそれをテストしました。

このクラスが実際にあなたのアプリケーションデリゲートであることを確認してください。

  1. からアプリケーションとドラッグをクリック側に新しいオブジェクトをドラッグして、
  2. アプリデリゲートクラスには、カスタムクラスだし、prefixAppDelegateあなたMainMenu.xib
  3. と呼ばれる新しいクラスを作成しますをアプリデリゲートオブジェクトに委譲します。
  4. は今まさにそれがまだ解決しない場合は、applicationShouldOpenUntitledFile:で何かをログに記録しようとアプリのデリゲートクラス

に上記のコードを貼り付けます。

また、この方法では[mainWindowController.window makeKeyAndOrderFront:self];を設定しないことをお勧めします。むしろ、アプリケーションデリゲートメソッドapplicationDidFinishLaunching:メソッドを使用する必要があります。

+0

applicationShouldOpenUntitledFileが呼び出されず、代わりにiCloudファイルウィンドウ(元の質問の写真)が開かれます。機能でiCloudを無効にすると、すべてが期待通りに機能します。しかし、私はiCloud機能が必要で、このファイルのポップアップ画面をバイパスします。 – coolcool1994

-1

同様の問題が発生しました。私のケースでは、CFBundleDocumentTypes配列のInfo.plistからNSDocumentClassのキーと値を削除する必要がありました。そのときだけ、applicationShouldOpenUntitledFile:メソッドが呼び出され、iCloud/Documentウィンドウが開かないようにすることができます。

+0

これを無効にすると、ドキュメントベースのアプリケーションの動作が停止します。 – coolcool1994

0

私の観察と修正: * -info.plistからキーNSDocumentClassを削除する以外は[applicationShouldOpenUntitledFile:]は実行されません。しかし、あなたのアプリケーションがドキュメントベースのアプリケーションであれば、これは有害です。リンクしたドキュメントタイプは開きません。

私の問題を修正する修正プログラムを持つ10.8でiCloudの

ためのNSDocumentサポート-(void)applicationWillFinishLaunching:(NSNotification *)notification方法(アプリケーションデリゲート)

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のベースのアプリケーションでありますユビキタス - コンテナ識別子エンタイトルメントは新しい機能とiCloudドキュメント管理を容易にするUIを提供します。

iCloudが有効になり、アプリケーションが最初に起動または再アクティブ化され、新しいUntitledドキュメントを作成する代わりに、ウィンドウが表示または復元されない場合、NSDocumentControllerは非モーダルオープンパネルを表示してユーザーのiCloudライブラリを表示します。

...彼らのNSDocumentのサブクラスのいずれか、またはすべてのためにこれらの機能を使用したくない

アプリケーションは+ [NSDocumentのusesUbiquitousStorage]を無効にしてNOを返すことができます。アプリケーションの宣言されたすべてのNSDocumentサブクラスがこのメソッドからNOを返す場合、NSDocumentControllerは新しい非モーダルオープンパネルを表示しません。

return NOにある+[NSDocument usesUbiquitousStorage]の機能を使用することはできません。 通常のダイアログからファイルを開いてiCloudストレージに保存できることを確認しました。

+1

これは動作しません。 usesUbiquitousStorageはゲッター変数です。このメソッドをオーバーライドしたり、設定することはできません。これを何とか無効にすると、iCloudが無効になります。 iCloudを有効にしてこの画面をバイパスする方法が必要です。 – coolcool1994

+0

@ coolcool1994 NSDocumentクラスを定義すると、もちろんそれをオーバーライドすることができます。私がコメントしたようにiCloudを使用することはできますが、これを制御する隠れたパラメータが気付かないかもしれません。私はヨセミテとシエラでこれをチェックした。 – ioue

1

あなたのApp Delegateに以下のコードを入力すると、iCloudのポップアップで新しいドキュメント画面が表示されなくなります。ハイシエラをテストしました。

-(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]; 
    } 
} 
関連する問題