6

UIDocumentサブクラスを持つドキュメントベースの iOS アプリケーションがあります。ファイルシステム上でそれが表すファイルを移動できる必要があります。で移動することを検討しましたが、のプロパティNSFileManagerが台無しになります。この小さな難問を解決する方法についてのアイデアはありますか?UIDocumentfileURL

4

3 に答える 3

4

UIDocument の名前を変更するには、まず UIDocument を閉じてから、完了ハンドラーで NSFileManager を使用してファイルを移動します。ファイルが正常に移動されたら、新しいファイル URL を使用して UIDocument サブクラスの新しいインスタンスを初期化します。

NSURL *directoryURL = [_document.fileURL URLByDeletingLastPathComponent];    
NSFileManager *fileManager = [[NSFileManager alloc] init];    
NSString *filePath = [directoryURL.path stringByAppendingPathComponent:@"NewFileName"];

[_document closeWithCompletionHandler:^(BOOL success) {
    NSError *error;

    if (success)
        success = [fileManager moveItemAtPath:_document.fileURL.path toPath:filePath error:&error];

    if (success) {
        NSURL *url = [NSURL fileURLWithPath:filePath];

        // I handle opening the document and updating the UI in setDocument:
        self.document = [[MyDocumentSubclass alloc] initWithFileName:[url lastPathComponent] dateModified:[NSDate date] andURL:url];
    } else {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"Unable to rename document" delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
        [alert show];
        NSLog(@"Unable to move document: %@", error);
    }
}];
于 2012-01-21T16:12:43.023 に答える
-1

UIDocumentクラス仕様(5.1)でこれを見つけました:

NSFilePresenter議定書の実施

UIDocumentクラスはプロトコルを採用していますNSFilePresenter。別のクライアントが に基づいたアプリケーションのドキュメントを読み込もうとすると、ドキュメントに加えられた変更を保存する機会がオブジェクトに与えられるUIDocumentまで、その読み取りは中断されます。UIDocument

何もしない実装もありますが、UIDocumentすべてのNSFilePresenterメソッドを実装します。具体的にはUIDocument

relinquishPresentedItemToReader:着信ブロックを に転送するように実装しperformAsynchronousFileAccessUsingBlock:ます。

relinquishPresentedItemToWriter:ファイルの変更日が変更されたかどうかを確認するために実装します。ファイルが以前よりも新しい場合はrevertToContentsOfURL:completionHandler:、の値をfileURLURL パラメータとして呼び出します。

presentedItemDidMoveToURL:ドキュメントのファイル URL ( ) を更新するために実装しますfileURL

UIDocumentサブクラスでメソッドをオーバーライドすると、いつNSFilePresenterでもスーパークラスの実装を呼び出すことができます ( super)。

私もどうしようもなく探していましたが、上記がお役に立てば幸いです。私はまだテストしていません。

したがって、基本的に、ここで何も見逃していない場合は、 を使用してドキュメントを移動してから、ドキュメントをNSFileManager呼び出す必要presentedItemDidMoveToURL:があります。NSFileCoordinator問題が発生しないようにするには、おそらく を使用してファイルを移動する必要があります。

間違っているこの回答のすべてを修正してください。私はまだそのすべてのものでn00bです。

于 2012-03-21T16:32:09.080 に答える