10

问题:

当从 iCloud 中选择一个文档时,应用程序随机崩溃,在大多数情况下,下面的代码可以工作,但在极少数情况下它会失败。

我在应用程序中启用了 iCloud 授权,但似乎无法找到它间歇性失败的原因。有没有我丢失的支票?

它有时也会挂起 5 秒左右(通常是在崩溃前)

代码:

#pragma mark - iCloud =======================================================================================================
- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url {

BOOL fileUrlAuthozied = [url startAccessingSecurityScopedResource];
NSURL *ubiquityURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
NSLog(@"ubiquityURL - %@",ubiquityURL);

if(fileUrlAuthozied){
    NSFileCoordinator *fileCoordinator = [[NSFileCoordinator alloc] init];
    NSError *error;

    [fileCoordinator coordinateReadingItemAtURL:url options:0 error:&error byAccessor:^(NSURL *newURL) {

        NSData *data = [NSData dataWithContentsOfURL:newURL];
        //Do something with data
        selectedDocumentToUpload = [[UploadDocumentObj alloc] initWithiCloudDocument:data];
        [self performSegueWithIdentifier:@"goToRename" sender:nil];

    }];
    [url stopAccessingSecurityScopedResource];
}else{
     //Error handling
    [Lib showErrorMessageWithTitle:@"Alert" message:@"E-Sign could not retrive the document!\nPlease try again." delegate:self];

}
}

错误:

2015-03-18 16:22:15.955 E-Sign[6338:1860982] *** Assertion failure in -[UIDocumentPickerViewController _commonInitWithCompletion:], /SourceCache/UIKit/UIKit-3318.93/UIDocumentPickerViewController.m:66
2015-03-18 16:22:15.960 E-Sign[6338:1860982] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Application initializing document picker is missing the iCloud entitlement. Is com.apple.developer.icloud-container-identifiers set?'

其他错误:

2015-03-18 16:33:45.884 E-Sign[6357:1864309] plugin com.apple.UIKit.fileprovider.default interrupted
2015-03-18 16:33:45.885 E-Sign[6357:1864309] plugin com.apple.UIKit.fileprovider.default invalidated

有人遇到过这个吗?

4

4 回答 4

10

我最近偶然发现了同样的问题:

*** -[UIDocumentPickerViewController _commonInitWithCompletion:] 中的断言失败

是由于缺少 App-Capabilities 造成的。转到您的 Build 并选择Capabilities -> iCloud

通过右侧的开关激活它并打开iCloud DocumentsCloudKit。(注意:这仅适用于付费开发者帐户)

重建->运行

还要记住:

iCloud 权利仅适用于提交到 App Store 或 Mac App Store 的应用程序。 (资源)

于 2015-06-03T09:04:16.683 回答
0

似乎由于未正确设置 iCloud 权利而发生以下错误。请再次检查。您包含的应用程序和扩展程序需要位于相同的应用程序组中。如果未启用,请从功能启用应用程序组。如果两者都设置正确,但仍然出现错误,则不知道它可能发生在哪里。

2015-03-18 16:22:15.960 E-Sign[6338:1860982] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Application initializing document picker is missing the iCloud entitlement. Is com.apple.developer.icloud-container-identifiers set?'

我也面临其他错误。这就是我在这里的原因。

于 2015-06-02T05:15:19.113 回答
0

经过大量研究,我得出了一个重要结论:

我正在处理同样的问题,这真的很痛苦。因此,在深入检查代码并调试之后,最终结果是管理您在显示 Picker 时执行的 UI 更改。显示选择器和 UI 更改的过渡会产生烦人的行为并最终崩溃和挂起。

所以我的建议是最小化 UI 更新并在后台进行这些更改,以便无缝打开选择器。

进行这些更改后,我的问题得到了解决。

于 2015-08-08T06:52:29.450 回答
-1

调用该方法时,请确保在后台线程中调用它。它将解决问题。

dispatch_async(dispatch_get_global_queuue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),^{ // 调用你的方法 });

于 2015-10-29T18:23:25.997 回答