2013-01-21 103 views
5

我有一個問題,總結兩個NSInteger,我嘗試過簡單的int但無法找到答案。我有這個在我的頭文件:總結兩個NSInteger給出不正確的結果

@interface ViewController : UIViewController { 
NSMutableArray *welcomePhotos; 
NSInteger *photoCount;  // <- this is the number with the problem 
//static int photoCount = 1; 
} 

的對我實施FIEL我:

-(void)viewDidLoad{ 
    [super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 

    photoCount = 0; 
    welcomePhotos = [NSMutableArray array]; 


    int sum = photoCount + 1; 

    NSLog(@"0 + 1 = %i", sum); 

} 

拉斯維加斯的NSLog始終打印0 + 1 = 4

而且如果要是做:

if (photoCount < [welcomePhotos count]){ 
    photoCount++; 
    NSLog(@"%i", photoCount); 
}else{ 
    photoCount = 0; 
} 

我幾次得到:4,8,12

因此,它正在滑行四,但我不明白爲什麼。

+2

的問題是,你聲明'photoCount'是一個指向'NSInteger'。請記住,'NSInteger'是一個有符號整數的typedef(取決於系統的32位或64位)。 –

+0

也許是因爲NSInteger是一個特殊的int,它根據平臺的位數(32位或64位)在運行時取不同的值。 –

回答

3

你打印出一個指針對象,我相信你已經聲明它作爲

NSInteger* photocount; 

嘗試將其更改爲

int photocount; 

上一個整數做一個變量++增加的大小在iOS上是4個字節的指針。

+1

爲什麼不是'NSInteger photocount;'? – vikingosegundo

3

您使用指針NSInteger ...

將其更改爲NSInteger photoCount;

NSInteger的只是一個int,而你把它當作一個包裝對象。指針不需要。

+0

謝謝,就是這樣,我需要學習更多obj-c –

5

您正在聲明photoCount實例var爲指針NSInteger。但NSInteger是一種標量類型。
刪除.h文件中的星號,然後重試。

更換

NSInteger *photoCount; 

NSInteger photoCount; 
+1

最佳答案但遲到一分鐘;) –