Tôi đã sao chép iAdSuite with Storyboards nhanh chóng và iAd hoạt động tốt trên tất cả các trình điều khiển chế độ xem, ngoại trừ khi phương thức ủy nhiệm bannerViewDidLoadAd(banner: ADBannerView!)
được gọi là chế độ xem biểu ngữ không xuất hiện ngay lập tức. Tôi phải quay mô phỏng hoặc chuyển sang tab khác để nó xuất hiện.iAd không hiển thị không đồng bộ khi phương thức ủy nhiệm của nó được gọi là
Tôi nghĩ rằng đây là một phần của mã mẫu Apple trong Mục tiêu-C mà tôi không thể "dịch" sang nhanh? mà cũng có thể gây ra iAd không hiển thị không đồng bộ một lần nạp ...
+ (BannerViewManager *)sharedInstance
{
static BannerViewManager *sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[BannerViewManager alloc] init];
});
return sharedInstance;
}
Đây là lớp BannerViewManager
tôi với ADBannerViewDelegate
phương pháp.
class BannerViewManager: NSObject, ADBannerViewDelegate {
// MARK: - Shared instance
static let sharedInstance = BannerViewManager()
var bannerView: ADBannerView!
var bannerViewControllers: NSMutableSet!
override init() {
super.init()
bannerView = ADBannerView(adType: .Banner)
bannerViewControllers = NSMutableSet()
bannerView.delegate = self
}
func addBannerViewController(controller: BannerViewController) {
bannerViewControllers.addObject(controller)
}
func removeBannerViewController(controller: BannerViewController) {
bannerViewControllers.removeObject(controller)
}
// MARK: - Ad banner view delegate methods
func bannerViewDidLoadAd(banner: ADBannerView!) {
NSLog("bannerViewDidLoadAd")
for bannerViewController in bannerViewControllers {
(bannerViewController as! BannerViewController).updateLayout()
}
}
func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) {
NSLog("didFailToReceiveAdWithError %@", error);
for bannerViewController in bannerViewControllers {
(bannerViewController as! BannerViewController).updateLayout()
}
}
func bannerViewActionShouldBegin(banner: ADBannerView!, willLeaveApplication willLeave: Bool) -> Bool {
NSNotificationCenter.defaultCenter().postNotificationName(BannerViewActionWillBegin, object: self)
return true
}
func bannerViewActionDidFinish(banner: ADBannerView!) {
NSNotificationCenter.defaultCenter().postNotificationName(BannerViewActionDidFinish, object: self)
}
}
EDIT
tôi đã được quản lý để chuyển đổi mã Objective-C trên để nhanh chóng sử dụng this post on SO nhưng tôi vẫn có cùng một vấn đề. IAd không xuất hiện sau khi được tải. Có là đã nhận được một số loại thay đổi quan điểm nữa kẻo nó, hoặc xoay thiết bị hoặc khai thác tab khác, vv ...
Vì vậy bây giờ tôi sharedInstance
trông như thế này:
static var sharedInstance: BannerViewManager {
struct Static {
static var onceToken: dispatch_once_t = 0
static var instance: BannerViewManager? = nil
}
dispatch_once(&Static.onceToken) {
Static.instance = BannerViewManager()
}
return Static.instance!
}
Tôi giả định rằng bạn có một số mã iAd trong 'viewDidLoad' của bộ điều khiển chế độ xem? Nếu vậy, hãy di chuyển mã iAd tới 'viewWillAppear' của mỗi bộ điều khiển xem. –
Tôi đã làm điều này tất cả các cách như mã mẫu. Vì vậy, không có mã iAd trong bất kỳ trình điều khiển chế độ xem nào. Ngoài ra có một 'BannerViewController' trong một khung nhìn container và tôi đã có dòng này' view.addSubview (BannerViewManager.sharedInstance.bannerView) 'trong' viewWillAppear' –
@DanielStorm - Kiểm tra mã mẫu của 'tabbedBanner' [ở đây] (https://developer.apple.com/library/ios/samplecode/iAdSuite_Storyboard/Listings/TabbedBanner_TabbedBanner_BannerViewController_m.html#//apple_ref/doc/uid/DTS40013458-TabbedBanner_TabbedBanner_BannerViewController_m-DontLinkElementID_34) –