- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我指的是用于文档提供程序扩展的 WWDC 2014 示例应用程序 NewBox。我正在使用 NeBox 应用程序中的以下代码,将文档从文档提供程序导入我的应用程序。
- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url {
BOOL startAccessingWorked = [url startAccessingSecurityScopedResource];
NSURL *ubiquityURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
NSLog(@"ubiquityURL %@",ubiquityURL);
NSLog(@"start %d",startAccessingWorked);
NSFileCoordinator *fileCoordinator = [[NSFileCoordinator alloc] init];
NSError *error;
[fileCoordinator coordinateReadingItemAtURL:url options:0 error:&error byAccessor:^(NSURL *newURL) {
NSData *data = [NSData dataWithContentsOfURL:newURL];
NSLog(@"error %@",error);
NSLog(@"data %@",data);
}];
[url stopAccessingSecurityScopedResource];
应用程序因 coordinateReadingItemAtURL 方法完全挂起。任何输入都会有所帮助。
最佳答案
我在 NewBox 应用程序中也注意到了这个问题,并决定对其进行跟踪。因此,此应用程序中有两个扩展:Document Picker 和 File Provider。长话短说,当他们尝试访问应用程序的文档存储文件夹中的文件时,两者之间存在竞争条件。
在我看来,追踪问题最简单的方法是将 NSLog()
放在一堆位置。然而,问题是扩展生成的调试输出在 Xcode 控制台中不可见。好消息是,您可以通过单击调试 -> 打开系统日志 菜单在 iOS 模拟器应用 中打开控制台。这将显示各种调试消息,包括由扩展生成的调试消息。您可以找到有关扩展调试的更多信息 here .
通过使用这种方法,可以很容易地意识到执行会卡在 File Provider 的 startProvidingItemAtURL
方法中。更具体地说,以下行会导致死锁:
[self.fileCoordinator coordinateWritingItemAtURL:url options:0 error:&error byAccessor:^(NSURL *newURL) {
这是为什么呢?查看 coordinateWritingItemAtURL
的文档:
If the url parameter specifies a file: This method waits for other readers and writers of the exact same file to finish in-progress actions.
您提到的 documentPicker
函数调用读取操作,这又会触发写入操作。这是一个僵局。我想最简单的修复方法是避免在 File Provider 中使用 coordinateWritingItemAtURL
。
关于document - UIDocumentPickerViewController NewBox 应用挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25637111/
我指的是用于文档提供程序扩展的 WWDC 2014 示例应用程序 NewBox。我正在使用 NeBox 应用程序中的以下代码,将文档从文档提供程序导入我的应用程序。 - (void)documentP
我是一名优秀的程序员,十分优秀!