iPhone 4 не представляет UIDocumentInteractionController

#ios #objective-c #iphone-4

#iOS #objective-c #iphone-4

Вопрос:

У меня эта странная проблема, которая возникает только в iPhone 4 с iOS 7. Когда я пытаюсь представить UIDocumentInteractionController на экране, приложение застревает в presentPreviewAnimated методе. То же самое происходит в другом месте, когда я пытаюсь использовать MPMoviePlayerViewController , только на этот раз он застрял initWithContentURL . Ошибка не выдается. Я знаю, что я предоставил не так много информации, но я понятия не имею, как эти вещи могут быть связаны, и поэтому я не знаю, какая информация была бы полезной. В моем проекте я использую следующую структуру представлений.

 HomeViewController * homeViewController = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil];
MenuTableViewController * menuViewController = [[MenuTableViewController alloc] initWithStyle:UITableViewStylePlain];
ECSlidingViewController * slidingViewController = [[ECSlidingViewController alloc] init];
slidingViewController.topViewController = homeViewController;
slidingViewController.underLeftViewController = menuViewController;
UINavigationController * navigationController = [[UINavigationController alloc] initWithRootViewController:slidingViewController];
self.window.rootViewController = navigationController;
  

Например, когда я отлаживаю код:

 _docController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:filePath]];
_docController.delegate = self;
[_docController presentPreviewAnimated:YES];
NSLog(@"Document showed");
  

Сообщение @»Документ показал» никогда не регистрируется.

Приложение отлично работает на iPad и iPhone 5. В моем проекте я использую CocoaPods.

Пожалуйста, задавайте любые вопросы, которые могут помочь в поиске решения.

Ответ №1:

Попробуйте приведенный ниже код, надеюсь, он будет полезен. установите UIDocumentInteractionControllerDelegate в файле .h

  @interface NextViewController : UIViewController <UIDocumentInteractionControllerDelegate>
  

Создайте объект UIDocumentInteractionController и инициализируйте его.

  - (IBAction)openDocument:(id)sender
 {
      NSString* path = [[NSBundle mainBundle] pathForResource:@"fileName" ofType:@"fileType"]; // File types - .pdf, .txt, .jpg, .png, or any other.
      if (path)
      {
          NSURL* url = [NSURL fileURLWithPath:path];
          UIDocumentInteractionController* docController = [UIDocumentInteractionController interactionControllerWithURL:url];
          docController.delegate = self;
          [docController presentPreviewAnimated:YES];
      }
 }
  

Реализуйте его метод делегирования.

  #pragma mark - UIDocumentInteractionControllerDelegate

 - (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller
 {
   return self;
 }
  

Ответ №2:

Оказалось, что iPhone 4 управляет потоками иначе, чем другие новые устройства. У меня возникла ошибка в не связанном напрямую месте, что привело к бесконечному циклу.

 while (self.delegate amp;amp; ![self.delegate dataLoaderOperationCanStop:self]) 
{
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
  

Все остальные устройства показывали эти ViewControllers без проблем, только iPhone 4 застрял. Я надеюсь, что моя проблема поможет кому-то с подобным странным поведением приложения.