#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 застрял. Я надеюсь, что моя проблема поможет кому-то с подобным странным поведением приложения.