Źródłem problemu jest to, że int
i NSInteger
mogą mieć różne rozmiary. A więc przypisujesz wskaźnik do NSInteger
do właściwości typu NSInteger*
, co jest w porządku (ale nietypowe). Jednak wyłączysz tę wartość jako int
, która nie ma tego samego rozmiaru.
Jednak myślę, że możesz także być zdezorientowany, w jaki sposób powinieneś zadeklarować własność posiadania NSInteger
. NSInteger
jest po prostu prostym typem całkowitym, a nie obiektem, więc nie trzeba używać wskaźnika, aby się do niego odwoływać. Jest to podwójnie prawdziwe, ponieważ wydaje się, że deklarujesz NSInteger
, którego adres bierzesz na stos, więc wskaźnik będzie nieprawidłowy, gdy tylko metoda, w której wykonujesz zadanie, zakończy się.
Będziesz znacznie lepiej wykorzystywać zwykłą, starą właściwość NSInteger
i nie próbujesz używać tu wskaźnika. Czy to w zamian:
@property (assign) NSInteger freeTrialCounter;
//...
NSInteger a = 2;
self.freeTrialCounter = a;
NSLog(@"Free Trial Counter: %ld", self.freeTrialCounter);
NSInteger b = self.freeTrialCounter;
NSLog(@"B: %ld", b);
Zauważ, że ja również zmienić typ b
do NSInteger
dopasować typ właściwości. Ponieważ nie muszą być tej samej wielkości, mieszanie dwóch puszek (jak widzieliście) powoduje problemy. Podobnie zmieniłem specyfikator formatu z %d
na %ld
, aby pasował do 64-bitowego rozmiaru NSInteger
.
Jaki jest sens tworzenia wskaźnika do 'int' jako własności? Tylko do celów eksperymentalnych, czy co? To nie jest coś, co wydaje się mieć jakąkolwiek popularną aplikację w świecie rzeczywistym. – dandan78
Wypróbowałem twój kod, B zwraca 2 dla mnie. Jedynym możliwym problemem, o którym myślałem, jest to, że NSInteger jest w rzeczywistości długim i nie int. Oznacza to, że jest 64-bitowy, a nie 32-bitowy. Masz możliwą utratę danych podczas bezpośredniej konwersji z "b" – Yarneo
dandan78 i Yameo: zobacz moją odpowiedź poniżej, aby pomóc Caleb ... postępował zgodnie z radą XCode "& (a)" i to doprowadziło mnie do złą. (Będąc nowicjuszem w tym języku, założyłem, że powinienem wysłuchać rady IDE ... teraz wiem lepiej!) Dziękuję za poświęcony czas i pomoc w tej sprawie. – user3643251