2014-09-14 11 views
8

Stworzyłem aplikację uniwersalną (widok pojedynczy) w Xcode. Bo chcę mieć iAd baner na każdym widoku I dodaje ten kod do AppDelegate pliku:CGAffineTransformInvert: pojedyncza macierz Błąd

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
{ 
    if var root = self.window?.rootViewController 
    { 
     let contentFrame = UIScreen.mainScreen().bounds 
     var _banner = ADBannerView(adType: ADAdType.Banner) 

     _banner.frame=CGRectMake(0, contentFrame.height - _banner.frame.height, _banner.frame.width, _banner.frame.height) 
     _banner.delegate = self 
     root.view.addSubview(_banner) 
    } 

    return true 
} 

na rzeczywistych iPhone (iOS 8) Wszystko działa poprawnie (na każdym widoku pojawia się baner), ale ja dostaję ten błąd:

<Error>: CGAffineTransformInvert: singular matrix. 

Jeśli próbuję uruchomić tę aplikację na symulatorze (iOS 8), zachowanie jest takie samo. Wszystko działa poprawnie, otrzymuję ten sam błąd, ale ponadto uzyskać: * ADBannerView:

Unhandled error (no delegate or delegate does not implement didFailToReceiveAdWithError:): 
Error Domain=ADErrorDomain Code=7 "The operation couldn’t be completed. Ad was unloaded from 
this banner" UserInfo=0x7b83bf30 {ADInternalErrorCode=7, ADInternalErrorDomain=ADErrorDomain, 
NSLocalizedFailureReason=Ad was unloaded from this banner}* 

Ale mam delegata i wdrożone didFailToReceiveAdWithError. Na prawdziwym iPhonie działa ...

Moje pytanie brzmi: jak mogę rozwiązać te dwa konkretne błędy?

Odpowiedz

9

Najbardziej prawdopodobną przyczyną jest to, że jeden z rects tutaj wynosi zero. Nie możesz odwrócić matrycy zerowej (która jest szczegółem technicznym i naprawdę nie powinieneś się przejmować, próbuję tylko powiedzieć, dlaczego to błąd).

application(didFinishLaunchingWithOptions:) jest nazywany bardzo wcześnie, a ramki prawdopodobnie nie są jeszcze ustawione. Prawdopodobnie chcesz wykonać tę pracę w viewDidLoad (prawdopodobnie naprawiając ramki w viewWillAppear, jeśli to konieczne) kontrolera widoku głównego (prawdopodobnie będziesz musiał utworzyć podklasę dla tego, jeśli jeszcze go nie masz).

+0

Dziękuję za odpowiedź, ale ja dostaję te dwa błędy i nie ma znaczenia, gdzie jest mój kod umieszczone (próbowałem ViewDidLoad, ViewWillAppear i ViewDidAppear). Próbowałem wydrukować wszystkie współrzędne i nie ma nikogo z zerową wartością. Więc zaufam ci, że nie muszę się tym przejmować :) –

0

Dodaj to do swojej klasy viewController .. zastąpić adBanner z jakiegoś banera nazwa właściwości jest

-(void)viewDidDisappear:(BOOL)animated{ 
    [adBanner removeFromSuperview]; 
    adBanner.delegate = nil; 
    adBanner = nil; 
}