2013-01-21 32 views
5

Im có một vấn đề tổng hợp hai NSInteger, tôi đã thử với int đơn giản nhưng không thể tìm thấy câu trả lời. I Have này trong hồ sơ tiêu đề của tôi:Tổng hai NSInteger cho kết quả không chính xác

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

Các trên fiel thực hiện của tôi, tôi có:

-(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); 

} 

Các las NSLog luôn in 0 + 1 = 4

Ngoài ra nếu nếu làm :

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

Nhiều lần tôi nhận được: 4, 8, 12.

Vì vậy, nó đang bỏ qua bốn, nhưng tôi không thể hiểu tại sao.

+2

Vấn đề là bạn đã tuyên bố 'photoCount' là một con trỏ đến một' NSInteger'. Hãy nhớ rằng 'NSInteger' là một typedef cho số nguyên đã ký (32-bit hoặc 64-bit tùy thuộc vào hệ thống). –

+0

có thể vì NSInteger là một int đặc biệt có các giá trị khác nhau khi chạy theo số bit của biểu mẫu của bạn (32 bit hoặc 64 bit). –

Trả lời

3

Bạn đang in ra một đối tượng con trỏ tôi tin rằng khi bạn đã tuyên bố nó như

NSInteger* photocount; 

Hãy thử thay đổi nó để

int photocount; 

làm một biến ++ trên một số nguyên cho biết thêm kích thước của một con trỏ là 4 byte trên iOS.

+1

tại sao không 'NSInteger photocount;'? – vikingosegundo

3

Bạn sử dụng con trỏ đến NSInteger ...

Thay đổi nó để NSInteger photoCount;

NSInteger chỉ là một int, và bạn đang đối xử với nó như là một đối tượng wrapper. Con trỏ không bắt buộc.

+0

Cảm ơn đó là nó, tôi cần phải nghiên cứu thêm obj-c –

5

Bạn đang khai báo trường hợp photoCount var của bạn là con trỏ đến NSInteger. Nhưng NSInteger là một loại vô hướng.
Xóa dấu hoa thị trong tệp .h của bạn và thử lại.

Thay

NSInteger *photoCount; 

với

NSInteger photoCount; 
+1

Câu trả lời hay nhất nhưng trễ một phút;) –

Các vấn đề liên quan