2012-08-10 86 views
1

我在用于管理iCloud上的文件的函数中使用此代码。当我将它从云中移动到本地计算机时,大约有三分之一的机会只是复制文件,而不是移动文件。但是,对moveItemAtURL的呼叫返回YES,并且没有错误。除了这个调用,云中没有任何操作(我不会同时读取或写入其他文件)。使用[moveItemAtURL:toURL:error:]将文件移动到iCloud:仅复制

我也试过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]; 
    }); 
}); 
+0

此代码不工作我没有时间为您调试它看到答案 – 2012-08-10 14:50:16

+0

也许你应该使用NSFileCoordinatorWritingForMoving – Andy 2015-12-19 09:48:51

回答

0

setUbiquitous:假去除故事的结束iCloud的文件,并在目标位置放一个副本。

从ubiquity容器中删除文件会从iCloud中删除该文件,故事结束不会移动完成。

移动文件移动文件。

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

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

从iCloud中

的NSFileManager removeFile删除文件 - 无处不在的容器。

你的工作方式太难了。

+0

我已经尝试过'setUbiquitous:false';在目标位置进行复制,有时文件不会从云中删除。我可以调用一个函数来强制iCloud同步吗? – jblais 2012-08-10 15:30:46

+0

来自云端还是来自本地无处不在的容器?差异很大 – 2012-08-10 15:44:23

+0

来自本地容器。由于本地容器应该是云中镜像的镜像,我并没有真正看到这里的区别...... – jblais 2012-08-10 18:39:32

相关问题