1

このコードは、iCloud 上のファイルを管理するために使用される関数で使用します。ファイルをクラウドからローカル コンピューターに移動するために呼び出した場合、ファイルがコピーされるだけで、移動されない可能性は約 30 分の 1 です。ただし、への呼び出しmoveItemAtURLはエラーなしで YES を返します。この呼び出しを除いて、クラウドでは操作は行われません (同時に他のファイルを読み書きすることはありません)。

関数も試してみましたsetUbiquitous:itemAtURL:destinationURL:error:が、結果は同じです。

ファイルがロックされている可能性があるため、コピーのみ可能で移動はできませんか? それとも同期の問題ですか?

ありがとう

dispatch_async(operationQueue, ^(void) {
    __block NSError *err1 = nil;
    __block NSError *err2 = nil;
    NSFileManager * fm = [ NSFileManager defaultManager];
    __block bool success = true;

    NSFileCoordinator *fc = [[[ NSFileCoordinator alloc ] initWithFilePresenter: nil ] autorelease ];
    [ fc coordinateWritingItemAtURL : i_srcDocumentURL options:NSFileCoordinatorWritingForReplacing
                    writingItemAtURL: i_dstDocumentURL options:NSFileCoordinatorWritingForReplacing
                              error : &err1  byAccessor: 
    ^(NSURL *newURL1, NSURL *newURL2) {
        [ fm removeItemAtURL: newURL2 error:nil];//Remove destination file in case there is one
        if(  [ fm moveItemAtURL:newURL1 toURL:newURL2 error:&err2 ] == FALSE )
        {
            success = false;
        }
    } ];

    if( err1 )
    {
        success = false;
        [self logError:err1];
    }
    if( err2 )
    {
        success = false;
        [self logError:err2];
    }
    dispatch_async( mainQueue, ^(void) {
        if (success) {
            i_answerObj->MoveFileOk([i_fileName UTF8String]);
        }
        else 
        {
            i_answerObj->MoveFileError([i_fileName UTF8String]);
        }
        [self destroyMyself];
    });
});
4

1 に答える 1

0

setUbiquitous:false は、ストーリーの終わりの iCloud からファイルを削除し、コピーをターゲットの場所に配置します。

ユビキタス コンテナからファイルを削除すると、iCloud からファイルが削除されます。話の終わり 移動は行われません。

move file はファイルを移動します。

iCloud の上に 5 つのアプリを作成したので、コードを確認する必要があることがわかります。

iCloud からファイルを削除し、ローカル マシンに置きます: setUbi...FALSE ターゲット。

iCLoud からファイルを削除する

NSFileManager removeFile - ubiquity コンテナーから。

あなたの働き方は大変です。

于 2012-08-10T14:49:26.867 に答える