问题:
当从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
以前有人见过这个吗?
我最近遇到了同样的问题:
***[UIDocumentPickerViewController_commonInitWithCompletion:]中的断言失败
由于缺乏应用程序功能而导致。转到您的构建并选择功能->iCloud
通过右侧的开关激活它,并打开iCloud Documents和CloudKit。(注意:这只适用于付费开发者帐户)
重建->运行
还要记住:
iCloud授权仅适用于提交到App Store或Mac App Store的应用程序。(来源)
由于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?'
我还面临其他错误。这就是我来这里的原因。
经过大量研究,我得出了一个重要结论:
我在处理同样的问题,这真的很伤人。因此,在深入检查代码并调试之后,最终的结果是管理在显示Picker时执行的UI更改。显示选择器和UI更改的转换会产生令人不快的行为,并最终崩溃和挂起。
因此,我的建议是尽量减少UI更新,并在后台进行这些更改,以便无缝打开picker。
我的问题在做出这些改变后得到了解决。
调用该方法时,请确保在后台线程中调用它。它将解决问题。
dispatch_async(dispatch_get_global_queuue(dispatch_QUEUE_PRIORITY_BROUNDATION,0)^{//调用您的方法});