我在一个用于管理iCloud上文件的函数中使用此代码。当我将其称为将文件从云移动到本地计算机时,大约有三分之一的机会仅复制文件,而不是移动文件。但是,对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];
});
});
答案 0 :(得分:0)
setUbiquitous:false从iCloud故事结尾删除文件并将副本放在目标位置。
从ubiquity容器中删除文件会从iCloud中删除该文件,故事结束时没有移动。
移动文件移动文件。
在iCloud之上构建了5个应用程序,我可以告诉您需要查看代码。
从iCloud中删除文件并放在本地计算机上:setUbi ... FALSE target。
从iCLoud删除文件
NSFileManager removeFile - 来自ubiquity容器。
你的工作方式太难了。