1. 작업 환경

 

 

 

 

 

 

2. 문제 상황

 

-[__NSDictionaryM floatValue]: unrecognized selector sent to instance 0x60000062fcc0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSDictionaryM floatValue]: unrecognized selector sent to instance 0x60000062fcc0'
*** First throw call stack:
(
0   CoreFoundation                      0x0000000180437330 __exceptionPreprocess + 172
1   libobjc.A.dylib                     0x0000000180051274 objc_exception_throw + 56
2   CoreFoundation                      0x0000000180445e3c +[NSObject(NSObject) instanceMethodSignatureForSelector:] + 0
3   CoreFoundation                      0x000000018043b224 forwarding + 1308
4   CoreFoundation                      0x000000018043d50c _CF_forwarding_prep_0 + 92
5   CAMS                                0x000000010053c95c __42-[DunamuQuotation fetchDataWithCompletion]_block_invoke.209 + 1284
6   CAMS                                0x0000000100537c40 __53-[APIManager fetchDataFromAPI:withCompletionHandler:]_block_invoke + 404
7   CFNetwork                           0x0000000183d30cf8 CFNetwork + 27896
8   CFNetwork                           0x0000000183d4c170 _CFHTTPMessageSetResponseProxyURL + 14628
9   libdispatch.dylib                   0x0000000100788528 _dispatch_call_block_and_release + 24
10  libdispatch.dylib                   0x0000000100789d50 _dispatch_client_callout + 16
11  libdispatch.dylib                   0x0000000100792014 _dispatch_lane_serial_drain + 924
12  libdispatch.dylib                   0x0000000100792da4 _dispatch_lane_invoke + 480
13  libdispatch.dylib                   0x00000001007a0b74 _dispatch_workloop_worker_thread + 1716
14  libsystem_pthread.dylib             0x00000001b18348fc _pthread_wqthread + 284
15  libsystem_pthread.dylib             0x00000001b18336c0 start_wqthread + 8
)
libc++abi: terminating due to uncaught exception of type NSException

 

 

 

 

 

3. 문제 원인

 

이 오류는 -[__NSDictionaryM floatValue]: unrecognized selector sent to instance 로, __NSDictionaryM 타입의 객체에서 floatValue 메서드를 호출하려고 할 때 발생합니다. __NSDictionaryM은 가변적인 NSDictionary입니다. 그러나 floatValue 메서드는 NSString 또는 NSNumber 클래스의 인스턴스에서만 사용할 수 있습니다. 따라서 이 오류는 잘못된 형식의 객체에 해당 메서드를 사용하려고 시도할 때 발생합니다.

 

 

 

 

 

4. 해결 방법 1

 

올바른 키를 사용하여 값을 가져옵니다: 먼저, 정확한 키를 사용하여 데이터를 가져와야 합니다. 아래 예제 코드를 참조하세요.

 

NSNumber *number = myDictionary[@"myFloatValue"];
float myFloatValue = [number floatValue];

 

 

 

 

 

5. 해결 방법 2

 

객체의 형식을 확인하고 변환합니다: 값을 가져오기 전에 객체의 형식을 확인합니다. 형식이 올바르지 않으면 알맞게 변환하세요.

 

id value = myDictionary[@"myFloatValue"];
if ([value isKindOfClass:[NSNumber class]] || [value isKindOfClass:[NSString class]]) {
    float myFloatValue = [value floatValue];
} else {
    // Handle the situation when value is not a number or string
}

 

 

 

 

 

6. 해결 방법 3

 

 try-catch 블록을 사용하여 예외처리를 수행합니다: 오류가 발생하더라도 앱이 중단되지 않게 하려면 try-catch 블록을 사용하여 예외처리를 수행하세요. try-catch 블록 안에서 코드를 실행하면 오류가 발생하더라도 catch 블록에서 처리할 수 있습니다.

 

@try {
    float myFloatValue = [myDictionary[@"myFloatValue"] floatValue];
} @catch (NSException *exception) {
    NSLog(@"Exception - %@", exception);
    // Handle the exception or provide a reasonable fallback
}

 

 

 

 

 

+ Recent posts