12

Xcode でユニバーサル アプリ (シングル ビュー) を作成しました。iAdすべてのビューにバナーを表示したいので、次のコードをAppDelegateファイルに追加しました。

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
}

実際の iPhone (iOS 8) では、すべて正常に動作します (すべてのビューにバナーが表示されます) が、次のエラーが発生します。

<Error>: CGAffineTransformInvert: singular matrix.

このアプリを Simulator (iOS 8) で実行しようとすると、動作は同じです。すべて正常に動作し、同じエラーが発生しますが、さらに次のようになります: *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}*

しかし、デリゲートがあり、実装しdidFailToReceiveAdWithErrorました。実際のiPhoneでは動作します...

私の質問は、これら 2 つの特定のエラーをどのように解決できるかということです。

4

2 に答える 2

12

最も可能性の高い原因は、ここの四角形の 1 つがゼロであることです。ゼロ行列を反転することはできません (これは技術的な詳細であり、実際に気にする必要はありません。なぜそれがエラーになるのかを言いたいだけです)。

application(didFinishLaunchingWithOptions:)非常に早い段階で呼び出され、フレームがまだ設定されていない可能性があります。viewDidLoadおそらく、ルート ビュー コントローラーの (必要に応じてフレームを修正する可能性があります) でこの作業を行いたいと思うでしょうviewWillAppear(まだサブクラスがない場合は、そのためのサブクラスを作成する必要があります)。

于 2014-09-15T12:44:58.507 に答える
0

これをviewControllerクラスに追加します。adBannerをバナープロパティ名に置き換えます

-(void)viewDidDisappear:(BOOL)animated{
    [adBanner removeFromSuperview];
    adBanner.delegate = nil;
    adBanner = nil;
}
于 2014-10-03T17:19:56.940 に答える