2017-10-03 8 views
1

정수 색인에 객체를 추가하는 동안 "상수 크기가 아닌 인터페이스 ID에 대한 포인터에 대한 산술 연산 오류가 발생합니다 이 아키텍처 및 플랫폼에 대해 "어떻게 해결해야할지 몰랐습니다. 도와주세요. 내 코드는배열 객체의 정수에 정수를 더하는 동안 오류가 발생합니다 (목표 c)

- 넷째 줄에

if (arrayTotalAmount.count>0) { 
        int sum = 0; 
        for (int i = 0; i<=arrayTotalAmount.count; i++) { 
        sum = (sum+[arrayTotalAmount objectAtIndex:i]); 

    } 

은 그 오류를 얻고있다. 감사합니다.

답변

1

정수로 배열 객체를 변환 한 다음 추가하면 바로 사용할 수 있습니다.

if (arrayTotalAmount.count>0) { 
        int sum = 0; 
        for (int i = 0; i<=arrayTotalAmount.count; i++) { 
        sum = (sum+[[arrayTotalAmount objectAtIndex:i] intValue]); 

    } 
+0

감사합니다. Chandni, 그것은 작동합니다. – Harsh

1

목표 C 배열은 NSObject 입력을 받아 들인다. 이는 NSArray에 원시 값을 삽입 할 수 없음을 의미합니다. objectAtIndex 메서드가 NSObject을 가리키는 포인터를 반환하기 때문에 오류가 발생합니다. 산술 연산은 여전히 ​​포인터에서 유효하지만 정수는 포인터 (32 비트, 64 비트)의 크기가 장치에서 다를 수 있습니다. 그래서 해결책 중 하나는 sum+(int)[arrayTotalAmount objectAtIndex:i] 포인터를 형변환하는 것이므로 귀하의 경우에는 의미가 없습니다.

찾고있는 해결책은 아마도 sum+[[arrayTotalAmount objectAtIndex:i] intValue]이거나 이와 유사 할 것입니다. 해당 배열에 NSNumber 개의 개체가 포함되어 있다고 가정합니다. 배열 내부의 객체가 NSNumber이 아닌 경우 런타임에 응용 프로그램이 오류를 표시하여 객체 XintValue이라는 메서드가 없다는 것을 나타내면이 경우 객체 Xint으로 변환하는 방법을 파악해야합니다.

+0

귀중한 시간을 가져 주셔서 감사합니다. 내 대답을 찾았습니다 :) – Harsh

+0

@Harsh 다른 답변과 같은 해결책입니다. 하지만 Objective-C로 배열을 사용하고 있기 때문에'objectAtIndex : i' 대신'[arrayTotalAmount [i] intValue]'를 사용할 수 있습니다. 하지만 당신의 경우에는 루프를 돌리고'for (NSNumber * number in arrayTotalAmount) sum + = [number intValue];를 사용하는 것이 더 낫습니다. –