문제

나는 Objective-C 및 iPhone 개발을 처음 접했으며 NSMutableARRAY에 부동 소수점 값을 저장하려고하지만 "addObject"의 인수 1에 대한 호환되지 않는 유형의 오류가 발생합니다. 내가 뭘 잘못하고 있죠? 수학 계산을 수행 할 수있는 두 배의 배열을 만들려고합니다.

도움이 되었습니까?

해결책

NSMutableArray는 객체 만 보유하므로 NSNUMBER 객체로 배열을로드하기를 원합니다. 각 nsnumber를 만들려면 더블을 유지 한 다음 배열에 추가하십시오. 아마도 이와 같은 것일 것입니다.

NSMutableArray *array = [[NSMutableArray alloc] init];
NSNumber *num = [NSNumber numberWithFloat:10.0f];
[array addObject:num];

필요에 따라 반복하십시오.

다른 팁

사전에는 물체가 필요하기 때문에 nsnumber를 사용하여 플로트를 감싸십시오.

[myDictionary setObject:[NSNumber numberWithFloat:0.2f] forKey:@"theFloat"];
/* or */
[myDictionary setObject:@0.2f forKey:@"theFloat"];

floatValue를 보내어 검색하십시오.

float theFloat = [[myDictionary objectForKey:@"theFloat"] floatValue];

코드는 테스트되지 않았습니다.

다른 많은 데이터 유형을 nsnumber로 래핑 할 수 있습니다. 선적 서류 비치. 또한 있습니다 nsvalue nspoint 및 nsrect와 같은 일부 구조의 경우.

Cocoa에서는 nsmutabledictionary (및 모든 컬렉션)에는 객체를 값으로 요구하므로 다른 데이터 유형을 전달할 수는 없습니다. sjmulder와 Ryan이 제안한 것처럼 NSNumber (숫자)의 경우 스칼라 값을 감싸고 다른 물체의 경우 NSValue를 감을 수 있습니다.

소수점을 대표하는 경우 가격과 같은 것으로 보이면보고 사용하는 것이 좋습니다. NSDECIMALNUMBER. 그런 다음 부동산 지점 부정확 문제를 피할 수 있으며 일반적으로 "값"을 사용하고 저장할 수 있습니다. NSDECIMALNUMBER 원시 코드로 표현하는 대신.

예를 들어:

// somewhere
NSDecimalNumber* price = [[NSDecimalNumber decimalNumberWithString:@"3.50"] retain];
NSMutableArray*  prices= [[NSMutableArray array] retain];

// ...

[prices addObject:price];
NSMutableArray *muArray = [[NSMutableArray alloc] init];
NSNumber *float = [NSNumber numberWithFloat:210.0f];
NSNumber *float1 = [NSNumber numberWithFloat:211.0f];
[muArray addObject:float];
[muArray addObject:float1];

NSlog(@"my array is--%@",muArray);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top