iCloud UIDocumentPicker间歇性崩溃并挂起

时间:2015-03-18 16:30:43

标签: ios objective-c xcode icloud uidocumentpickervc

问题:

当从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 个答案:

答案 0 :(得分:9)

我最近解决了同样的问题:

  

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

是由于缺乏App-Capabilities引起的。 转到您的Build并选择功能 - > icloud的

通过右侧的开关激活它,并切换 iCloud Documents CloudKit ON。 (注意:这只适用于付费的开发者帐户)

Rebuild->运行

还要记住:

  

iCloud权利仅适用于提交至App Store或Mac App Store的应用。   (Source)

答案 1 :(得分: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?'

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

答案 2 :(得分:0)

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

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

  

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

我的问题在做出这些改变后得到了解决。

答案 3 :(得分:-1)

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

dispatch_async(dispatch_get_global_queuue(DISPATCH_QUEUE_PRIORITY_BACKGROUND,0),^ {    //打电话给你的方法 });