gpt4 book ai didi

document - UIDocumentPickerViewController NewBox 应用挂起

转载 作者:行者123 更新时间:2023-12-02 03:32:52 24 4
gpt4 key购买 nike

我指的是用于文档提供程序扩展的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com