Почему iAd все еще загружает данные после того, как они удалены из своего суперпредставления, и это можно остановить? - PullRequest
4 голосов
/ 11 мая 2011

У меня есть небольшое приложение с iAds, и я могу позволить людям платить за обновление.

iAd настраивается в NIB приложения. Я проверяю статус покупки в методе viewDidLoad основного UIViewController и вызываю следующие методы для элемента розетки ADBannerView:

[adBanner removeFromSuperview];
adBanner = nil;

К сожалению, если я наблюдаю за использованием данных устройства, некоторые данные все еще загружаются для объявления.

Есть ли способ правильно убить iAd, чтобы он не загружал данные?

Я знаю, что мог бы создать представление iAd программно, а затем добавить его только в том случае, если пользователь не приобрел продукт, но мой продукт работает нормально из NIB, и я бы не стал его менять по этой причине.

UPDATE:

В моем файле .h у меня есть:

IBOutlet ADBannerView* adBanner;

В файле .m в методе - (void)viewDidLoad у меня есть:

if (purchased) {
    [adBanner removeFromSuperview];
    adBanner.delegate = nil;
    adBanner = nil;
}

Я надеюсь, что этого будет достаточно, чтобы удалить iAd, прежде чем он сможет загрузить какие-либо данные.

Увы, этого недостаточно для предотвращения загрузки данных представлением. Я подозреваю, что в это время происходит задержка, когда он полностью освобождается - но я не знаю, как это сделать, если не считать самого вызова dealloc.

Кто-нибудь знает лучший / правильный способ полного уничтожения объекта, загруженного через XIB и присвоенного IBOutlet?

Ответы [ 4 ]

4 голосов
/ 31 мая 2011

Я подозреваю, что вы не полностью выпустили рекламный баннер.

Вы автоматически выпускали adBanner при его создании?Если вы этого не сделали, код, который вы показываете здесь, не освобождает баннер должным образом.

Скорее всего, вы не выполнили его автоматически, и он сохраняется.То, что вам нужно сделать, это:

[adBanner release]; 

вместо

adBanner = nil;

, который, кстати, бесполезен, поскольку он только устанавливает указатель adBanner на nil, но не делаетотпустить объект на всех.

1 голос
/ 02 июня 2011

Я думаю, вам придется использовать второй кончик без баннера iAd. Процесс загрузки пера создаст экземпляры всех элементов пера перед передачей управления вашим объектам. Вот почему вы не можете помешать iAd попытаться загрузить объявление.

Сначала продублируйте текущее перо и просто удалите представление баннера iAd. Затем переопределите метод initWithNibName:bundle: контроллера представления, чтобы проверить платный статус. Если оплачено, измените имя пера не на iAd, и вызовите метод суперкласса с другим пером.

0 голосов
/ 04 июня 2011

@ mr-berna прав в том, что вам нужно условно загрузить представление iAd. Вы можете сделать то, что он предлагает, и использовать второе перо или создать представление iAd программно.

0 голосов
/ 11 мая 2011

Вы также можете установить adBanner.delegate = nil, чтобы запретить adBanner общаться с его делегатом.

...