Вызов переменных из класса C++ в класс Objective C

Я создаю экземпляр класса Objective C из экземпляра C++. Проблема в том, что при попытке получить значения некоторых переменных (в экземпляре obj c) я всегда получаю 0. Некоторые NSLogs также игнорируются!:

Класс Objective C: InAppPurchaseManager.h

@interface InAppPurchaseManager : NSObject <SKProductsRequestDelegate, SKPaymentTransactionObserver>{
    SKProduct *proUpgradeProduct;
    SKProductsRequest *productsRequest;
@public
    int finishedPurchaseProcess;
}
- (int)hasFinishedPurchaseProcess;
- (void)purchase;
@end

InAppPurchaseManager.m

@implementation InAppPurchaseManager
- (void)purchase{
    finishedPurchaseProcess=1;
}
- (int)hasFinishedPurchaseProcess{
    NSLog(@"STORE: HELLO THERE");   
    return finishedPurchaseProcess;
}

testApp.h class testApp: public ofxiPhoneApp { public: void goToStoreFromMenu(); аннулировать чекПокупка(); InAppPurchaseManager * TheStore; }

testApp.мм

// First I call ghis function
void testApp::goToStoreFromMenu(){  
    InAppPurchaseManager* theStore = [[InAppPurchaseManager alloc] init];
    [theStore purchase];
}

// And then this function
void testApp::checkPurchase(){  
    cout << "Finished? " << [theStore hasFinishedPurchaseProcess] << "\n";
}

и результат всегда Готово? 0, даже если я установил 1 в purchase. Также игнорируется NSLog(@"STORE: HELLO THERE");

я не понимаю что происходит


person Marc    schedule 13.03.2011    source источник
comment
вы пробовали отлаживать свое приложение? достигает ли он NSLog(...) при отладке?   -  person Andrew    schedule 13.03.2011
comment
Вы пытались удалить InAppPurchaseManager* в testApp::goToStoreFromMenu?   -  person kennytm    schedule 13.03.2011


Ответы (1)


В goToStoreFromMenu вы объявляете новую локальную переменную с именем theStore. В checkPurchase вы ссылаетесь на некоторую другую переменную с тем же именем. Функция goToStoreFromMenu инициализирует локальную переменную, которая выходит за пределы области видимости в конце функции. Вам нужно инициализировать ту же самую переменную, на которую вы в конечном итоге будете ссылаться в checkPurchase.

person Rob Kennedy    schedule 13.03.2011
comment
Извините, я забыл включить testApp.h, где объявлено theStore. Я отредактировал вопрос соответственно. Спасибо - person Marc; 13.03.2011
comment
Похоже, вы по-прежнему объявляете дополнительную отдельную переменную под названием «theStore» в testApp::goToStoreFromMenu. - person Tommy; 13.03.2011
comment
ой! Теперь я понимаю! Вы правы, должно быть theStore = [[InAppPurchaseManager alloc] init]; . Спасибо! - person Marc; 13.03.2011