Проблема интеграции Adwhirl в iphone - PullRequest
0 голосов
/ 19 августа 2011

У меня в контроллере приложений есть два контроллера и контроллер панели вкладок. Представление контроллера навигации не реализует контроллер adwhirl и панели вкладок. Все вкладки во всех представлениях реализованы с помощью adwhirl.

@interface myview : UIViewController {

AdWhirlView *awView; 
}
@property (nonatomic, retain) AdWhirlView *awView;


@implementation myview    
@synthesize awView;

- (UIViewController *)viewControllerForPresentingModalView {
return self;
}

- (NSString *)adWhirlApplicationKey {
return @"Mykey";
}

-(void) viewWillAppear:(BOOL)animated{
//  code for Adwhirl banner
self.awView = [AdWhirlView requestAdWhirlViewWithDelegate:self];
[self.awView setFrame:CGRectMake(0, 318, 320, 50)];
[self.view addSubview:self.awView];
}

-(void) viewWillDisappear:(BOOL)animated{
    [self.awView release];
}

Я должен написать этот код в каждом представлении в контроллере вкладок. Adwhirl отлично работает, когда я переключаю контроллер навигации на контроллер панели вкладок. Но происходит сбой приложения, когда я переключаю контроллер табуляции на контроллер навигации.

Ошибка сбоя следующая.

Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: '- [__ NSCFArray viewControllerForPresentingModalView]: нераспознанный селектор, отправленный экземпляру 0xfd91600'

*** Call stack at first throw:
(
0   CoreFoundation                      0x018525a9 __exceptionPreprocess + 185
1   libobjc.A.dylib                     0x019a6313 objc_exception_throw + 44
2   CoreFoundation                      0x018540bb -[NSObject(NSObject)       doesNotRecognizeSelector:] + 187
3   CoreFoundation                      0x017c3966 ___forwarding___ + 966
4   CoreFoundation                      0x017c3522 _CF_forwarding_prep_0 + 50
5   IDogEvents                          0x0002e30b -[AdWhirlAdapterGoogleAdMobAds getAd] + 2075
6   IDogEvents                          0x00040154 -[AdWhirlView makeAdRequest:] + 1524
7   IDogEvents                          0x0003f501 -[AdWhirlView buildPrioritizedAdNetCfgsAndMakeRequest] + 1569
8   IDogEvents                          0x000402ef -[AdWhirlView timerRequestFreshAd] + 255
9   Foundation                          0x0095b749 __NSFireTimer + 125
10  CoreFoundation                      0x018338c3 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 19
11  CoreFoundation                      0x01834e74 __CFRunLoopDoTimer + 1220
12  CoreFoundation                      0x017912c9 __CFRunLoopRun + 1817
13  CoreFoundation                      0x01790840 CFRunLoopRunSpecific + 208
14  CoreFoundation                      0x01790761 CFRunLoopRunInMode + 97
15  GraphicsServices                    0x01a8a1c4 GSEventRunModal + 217
16  GraphicsServices                    0x01a8a289 GSEventRun + 115
17  UIKit                               0x001cbc93 UIApplicationMain + 1160
18  IDogEvents                          0x00002349 main + 121
19  IDogEvents                          0x000022c5 start + 53
20  ???                                 0x00000001 0x0 + 1

Пожалуйста, помогите мне за это. Спасибо заранее.

1 Ответ

4 голосов
/ 24 августа 2011

Я получил решение.Я сделал общий объект для

AdWhirlView * awView;

в делегате приложения.В каждом представлении я использую этот объект вместо объекта собственного класса.

-(void) viewWillAppear:(BOOL)animated{
//  code for Adwhirl banner
appDelegate.awView = [AdWhirlView requestAdWhirlViewWithDelegate:self];
[appDelegate.awView setFrame:CGRectMake(0, 318, 320, 50)];
[self.view addSubview:appDelegate.awView];
}

-(void) viewWillDisappear:(BOOL)animated{
    [appDelegate.awView removeFromSuperview];
}

И в конечном итоге, где я сдвигаю контроллер.

-(void) viewWillDisappear:(BOOL)animated{
    [appDelegate.awView removeFromSuperview];
    [appDelegate.awView release];    
}
...