2016-10-11 5 views
0

初めてiOS上にUIDocumentPicker拡張機能を作成しています。私はUIDocumentPickerExtensionViewControllerサブクラスに適切なメソッドを設定しました。ユーザーが自分の内線からドキュメントを選択したときのUIで、問題のイメージをドキュメントディレクトリに正常にコピーできます。関連コード:`UIDocumentPickerExtensionViewController`:この画像は未分類のタイプです

NSURL *sourceURL = [item imageUrlWithPath:image.fullSizeImagePath]; 
NSString *filename = [NSString stringWithFormat:@"%@.jpg", item.title ?: NSLocalizedString(@"NO_TITLE", nil)]; 
NSURL *targetURL = [self.documentStorageURL URLByAppendingPathComponent:filename]; 

NSError *copyError = nil; 
BOOL success = [fm copyItemAtURL:sourceURL toURL:targetURL error:&copyError]; 

if (success) { 
    [self dismissGrantingAccessToURL:targetURL]; 
} else { 
    NSLog(@"Error! %@", copyError); 
} 

これは、すべての選択が行われると、コールがdismissGrantingAccessToURL:に行われた後、上記のコードパスに従って、しかし、UIが閉じます罰金行くが、私は、ホストアプリケーションからのアラートを取得(この場合はPages)、「この画像はサポートされていないタイプです」のために画像を挿入できないことを示しています。私が試してみました

もの:

  • は私のイメージ
  • の異なるサムネイルの
  • 使用されるバリエーションが新しいファイルに画像を再圧縮別のファイル拡張子を持つファイル名を試してみてください。

すべて利用できません。どのように私のファイルを他のアプリケーションで読むことができないのですか?

答えて

0

新しいドキュメントプロバイダエクステンション(少なくともXcode 8)を作成すると、アップルはファイルプロバイダという追加の拡張機能を作成します。これは、サーバーなどのリモートサービスからファイルをフェッチするためにUIとは独立した別の拡張です。これは、ファイルが物理的にオンデバイスではなく、ユーザがそれをホストアプリケーションにインポートできるようにする場合に便利です。

これは残念なことですが、アップルはNSFileProviderExtensionのサブクラスであるスタブコードも書いています。このクラスが見つかった場合(デフォルトはFileProvider)、メソッドstartProvidingItemAtURL:completionHandler:があります。容易にこのコードに見られるように

- (void)startProvidingItemAtURL:(NSURL *)url completionHandler:(void (^)(NSError *))completionHandler { 

    // Should ensure that the actual file is in the position returned by URLForItemWithIdentifier:, then call the completion handler 
    NSError *fileError = nil; 

    // TODO: get the contents of file at <url> from model 
    NSData *fileData = [NSData data]; 

    [fileData writeToURL:url options:0 error:&fileError]; 

    if (completionHandler) { 
     completionHandler(nil); 
    } 
} 

、ファイルが実際に以前からすでに存在していた場合、彼らは完全に、あなたが既に書かれているかもしれファイルを上書き:このメソッドは、Appleがそこに入れているいくつかの、既定のコードを持っていますピッカー延長。あなたのファイルを静かに拭き取るまで、レスキューのサンプルコード。それと

- (void)startProvidingItemAtURL:(NSURL *)url completionHandler:(void (^)(NSError *))completionHandler { 
    if (completionHandler) { 
     completionHandler(nil); 
    } 
} 

、ドキュメントのプロバイダが雨のように右である:この問題に対する1つの解決策は完了ハンドラのコールを除き、この方法では、コードのすべての行をコメントアウトすることです。

関連する問題