重命名文档而不关闭 UIDocument
Posted
技术标签:
【中文标题】重命名文档而不关闭 UIDocument【英文标题】:Rename document without closing UIDocument 【发布时间】:2015-09-07 02:06:53 【问题描述】:如何使用打开的 UIDocument 重命名文档文件而不关闭并重新打开文档?关闭(保存)、移动和重新打开文档需要太长时间。
我有以下移动文件的代码:
NSFileCoordinator* fileCoordinator = [[NSFileCoordinator alloc] initWithFilePresenter:nil];
[fileCoordinator coordinateWritingItemAtURL:oldPath
options:NSFileCoordinatorWritingForMoving
writingItemAtURL:newPath
options:NSFileCoordinatorWritingForReplacing
error:&coordinatorError
byAccessor:^(NSURL *newURL1, NSURL *newURL2)
// Rename the file.
NSFileManager* fileManager = [NSFileManager defaultManager];
[fileCoordinator itemAtURL:oldPath willMoveToURL:newPath];
[fileManager moveItemAtURL:newURL1 toURL:newURL2 error:nil];
[fileCoordinator itemAtURL:oldPath didMoveToURL:newPath];
];
根据文档UIDocument
实现presentedItemDidMoveToURL:
以更新其fileURL
(参见https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIDocument_Class/)
但是,当在文档打开的情况下调用上述代码时,它会挂起,大概是在等待锁定 oldPath
(-[NSFileCoordinator(NSPrivate) _blockOnAccessClaim:]
)。如果没有生活UIDocument
,则可以正常工作。
相关的,最佳答案建议关闭并重新打开UIDocument
:What is the proper way to move a UIDocument to a new location on the file-system
【问题讨论】:
【参考方案1】:解决方案是使用后台队列来避免死锁:
dispatch_async(dispatch_get_global_queue(QOS_CLASS_DEFAULT, 0), ^(void)
NSError *coordinatorError = nil;
NSFileCoordinator* fileCoordinator = [[NSFileCoordinator alloc] initWithFilePresenter:nil];
[fileCoordinator coordinateWritingItemAtURL:oldPath
options:NSFileCoordinatorWritingForMoving
writingItemAtURL:newPath
options:NSFileCoordinatorWritingForReplacing
error:&coordinatorError
byAccessor:^(NSURL *newURL1, NSURL *newURL2)
// Rename the file.
NSFileManager* fileManager = [NSFileManager defaultManager];
[fileCoordinator itemAtURL:oldPath willMoveToURL:newPath];
[fileManager moveItemAtURL:newURL1 toURL:newURL2 error:nil];
[fileCoordinator itemAtURL:oldPath didMoveToURL:newPath];
];
);
【讨论】:
以上是关于重命名文档而不关闭 UIDocument的主要内容,如果未能解决你的问题,请参考以下文章