Как отобразить представление для приложения DidBecomeActive с помощью UITabBarController - PullRequest
0 голосов
/ 23 марта 2011

Есть одна проблема, с которой я боролся, и я не могу получить достаточно информации об этом в Интернете.Это связано с многозадачностью Apple и представлением панели вкладок.Я хочу контролировать, какая вкладка будет выбрана, когда приложение выходит на передний план или становится активным.В настоящий момент каждый раз, когда я закрываю приложение и открываю его снова, оно открывает последний UIView, который отображался на панели вкладок.Как я могу это контролировать?

Во-первых, я хочу иметь возможность отображать изображение предварительного просмотра с логотипом приложения каждый раз, когда приложение становится активным.Вот код, который я использую для этого, но я продолжаю получать EXC_BAD_ACCESS, когда приложение вводит передний план для этой строки: [window addSubview: self.preMiniView]:

   - (void)applicationDidBecomeActive:(UIApplication *)application {
    if (!self.preMiniView)
    {
        self.preMiniView = [[UIImageView alloc] initWithFrame:window.frame];    
        self.preMiniView.frame = CGRectMake(0,0,324,480);
        window.backgroundColor = [UIColor colorWithRed:21.0/255.0 green:7.0/255.0 blue:2.0/255.0 alpha:1];  
    }       
    UIImage *img = [UIImage imageNamed:@"preloadSm.jpg"];
    self.preMiniView.image = img;
    [img release];

    if (self.preMiniView.alpha == 0.0)
    {
        [self.preMiniView setAlpha:1.0];
    }

    [window addSubview:self.preMiniView];  // adding the how to view to the view.

    [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(initApp:)
                                   userInfo:nil
                                    repeats:NO];
    }



      - (void)applicationDidEnterBackground:(UIApplication *)application 
       {
          [tabBarController.view endEditing:YES];

        [tabBarController.view setAlpha:0.0];
        [self.preMiniView release];
        self.preMiniView = nil;
        NSLog(@"applicationDidEnterBackground iphone"); 
    }

    - (void)initApp:(NSTimer *)timer
    {
        if (self.preMiniView)
        {
            [NSTimer scheduledTimerWithTimeInterval:0.5
                                             target:self     
                                           selector:@selector(removePrev:)
                                           userInfo:nil
                                            repeats:NO];
            [window insertSubview:tabBarController.view atIndex:0];
            [tabBarController.view setAlpha:1.0];
            [UIView beginAnimations:nil context:NULL];
            [UIView setAnimationDuration:.7];
            [self.preMiniView setAlpha:0.0];
            [UIView commitAnimations]; 
          }
    }
    - (void)removePrev:(NSTimer *)timer
    {
        [self.preMiniView removeFromSuperview];
    }

Во-вторых, я пытаюсьпредставить PDF-файл с одним из моих UIViews, когда мое приложение запускает приложение метода: openURL: sourceApplication: annotation (используется для открытия файла из приложения электронной почты).Я получил правильный URL-адрес файла, но я не уверен, как отобразить фактический файл в одном из моих пользовательских UIView под названием PDFReaderViewController.Кажется, я не могу просто использовать этот код в AppDelegate:

pdfController = [[PDFReaderViewController alloc] init];
[pdfController initFromName:fileName];

[[self navigationController] pushViewController:pdfController animated:YES];
[pdfController release];
pdfController = nil;

Я получаю предупреждение: получатель 'PDFReaderViewController' является классом пересылки, и соответствующий @interface может не существовать

ЛюбойИдея, как отобразить новый файл с помощью PDFReaderViewController из AppDelegate?

Я, должно быть, упускаю что-то простое здесь .... спасибо за вашу помощь!

1 Ответ

0 голосов
/ 23 марта 2011

Хочу отметить, что вы не правильно следуете некоторым правилам управления памятью.Точечная запись означает, что вы обращаетесь к свойству, и это должно заботиться об управлении памятью для вас, и может быть причиной для вас EXC_BAD_ACCESS.

//You need to autorelease  the image view here
self.preMiniView = [[UIImageView alloc] initWithFrame:window.frame];
...
//Never release a property directly
[self.preMiniView release];
//This is the correct way to release the property
self.preMiniView = nil;

...

//This creates autoreleased image
UIImage *img = [UIImage imageNamed:@"preloadSm.jpg"];
//This will increment retain count
self.preMiniView.image = img;
//This is reason for EXC_BAD_ACCESS do not release you never retained it yourself
[img release];

Предупреждение о прямой ссылке на класс означает, что некоторые вЗаголовочный файл. Возможно, у вас есть некоторый код, такой как @class PDFReaderViewController;, и вы никогда не включите правильный заголовок в класс реализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...