2014-09-14 11 views
8

Ho creato l'app universale (vista singola) in Xcode. Perché io voglio avere iAd banner su ogni vista ho aggiunto questo codice per AppDelegate di file:CGAffineTransformInvert: matrice singolare Errore

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 
} 

su Real iPhone (iOS 8) Tutto funziona bene (appare banner su ogni vista), ma sto ottenendo questo errore:

<Error>: CGAffineTransformInvert: singular matrix. 

Se si tenta di eseguire questa applicazione sul simulatore (iOS 8) il comportamento è lo stesso. Tutto funziona bene, ottengo lo stesso errore, ma del resto io ottenere: * 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}* 

Ma ho delegato e ho implementato didFailToReceiveAdWithError. Sul vero iPhone funziona ...

La mia domanda è come posso risolvere questi due errori particolari?

risposta

9

La causa più probabile è che uno dei rects qui è zero. Non puoi invertire una matrice zero (che è un dettaglio tecnico, e non dovresti davvero preoccupartene, sto solo cercando di dire perché questo è l'errore che ottieni).

application(didFinishLaunchingWithOptions:) viene chiamato molto presto e i frame probabilmente non sono ancora impostati. Probabilmente vorrai fare questo lavoro nel viewDidLoad (eventualmente aggiustando i fotogrammi in viewWillAppear se necessario) del tuo controller di visualizzazione di root (probabilmente dovrai creare una sottoclasse per questo se non ne hai già uno).

+0

Grazie per la risposta, ma sto ottenendo questi due errori e non importa dove è il mio codice inserito (ho provato ViewDidLoad, ViewWillAppear e ViewDidAppear). E ho provato a stampare tutti i coord e non c'è nessuno con valore zero. Quindi mi fiderò di te che non mi devo preoccupare :) –

0

Aggiungi questo alla classe viewController .. sostituire adbanner con qualunque sia il vostro striscione nome della proprietà è

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