iOS: проблема импорта звонков из другого файла - PullRequest
0 голосов
/ 19 марта 2012

Я все еще новичок в Objective-C, поэтому мне тяжело с этим. В моем AppController, когда пользователь нажимает на одну из объявлений в моем приложении, а затем закрывает ее и возвращает в мое приложение, я хотел бы удалить и воссоздать объявление (длинный рассказ о том, почему). По какой-то причине мой код не работает. Там нет ошибок или предупреждений, но он не делает то, что я намеревался сделать. Вот как выглядит мой код:

#import "MoPubManager.h"

......

- (void)applicationWillEnterForeground:(UIApplication *)application
{

    MoPubManager *obj = [[MoPubManager alloc] init];

    if( obj.adView ) {
        [[MoPubManager sharedManager] destroyBanner];
    }
    [obj.adView refreshAd];

}

_adView, уничтожить баннер и обновить рекламу находятся в файле MoPubManager, так что, как вы можете видеть, я импортировал файл и превратил MoPubManager в объект. (obj.adView изначально был просто _adView в MoPubManager.h, но мне пришлось переключить его на obj.adView, чтобы избежать предупреждений.) Возможно, я просто использую неправильные вызовы, я бы опубликовал файл MoPubManager.mm, где эти вызовы изначально но его полная страница или две

Ответы [ 3 ]

1 голос
/ 21 марта 2012

Во-первых, какой подкласс MoPubManager ... Он прекрасно компилируется? Кажется, проблема здесь в том, что вы создаете новый экземпляр MoPubManager, но вы используете его для уничтожения синглтона, и у них нет той же ссылки. Вы должны использовать что-то вроде:

MoPubManager *obj = [[MoPubManager alloc] init];

if( [MoPubManager sharedManager].adView ) {

    [[MoPubManager sharedManager] destroyBanner];
}
[[MoPubManager sharedManager].adView refreshAd];
1 голос
/ 21 марта 2012

Вы не правильно используете шаблон синглтона.

попробуйте, может быть, вам поможет

- (void)applicationWillEnterForeground:(UIApplication *)application
{

    MoPubManager *obj = [MoPubManager sharedManager];

    if( obj.adView ) {
        [obj destroyBanner];
    }
    [obj.adView refreshAd];
}
1 голос
/ 21 марта 2012

В строке:

MoPubManager *obj = [[MoPubManager alloc] init];

Вы создаете новый экземпляр класса MoPubManager.

Далее вы проверяете, является ли свойство adView этого новогоинстанцированный класс не ноль.Если adView не будет заполнен в методе init MoPubManager, он всегда будет равен nil, поэтому метод destroyBanner не будет вызываться.

Однако метод destroyBanner вызывается на sharedManager ..., указывая одноэлементный шаблонв использовании.Поэтому вам не следует создавать новый экземпляр, так как это противоречит причине использования синглтона.(У вас есть только один экземпляр класса при использовании синглтона - см. это для получения дополнительной информации )

Не видя больше кода, кажется, что вы должны вызывать что-то вроде:

if( [MoPubManager sharedManager].adView ) {
    [[MoPubManager sharedManager] destroyBanner];
}
[[MoPubManager sharedManager].adView refreshAd];
...