1

我在用于管理 iCloud 上的文件的函数中使用此代码。当我调用它将文件从云移动到本地计算机时,大约有 30 分之一的机会只复制文件而不移动文件。但是,调用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 故事结尾删除文件并将副本放在目标位置。

从 ubiquity 容器中删除文件会从 iCloud 中删除文件,故事结束没有完成。

move file 移动文件。

在 iCloud 上构建了 5 个应用程序后,我可以告诉您需要查看您的代码。

从 iCloud 中删除一个文件并放在本地机器上:setUbi...FALSE 目标。

从 iCLoud 中删除文件

NSFileManager removeFile - 从无处不在的容器中。

你的工作太辛苦了。

于 2012-08-10T14:49:26.867 回答