ProgramingTip

BOOL을 삽입하는 Objective-C 사전

bestdevel 2020. 11. 26. 19:39
반응형

BOOL을 삽입하는 Objective-C 사전


좋아요, 좀 헷갈리네요. 아마도 사소한 것입니다.

다음과 같은 함수가 있습니다.

- (void)getNumbersForNews:(BOOL)news andMails:(BOOL)mails {
NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init];
[parameters setValue:news  forKey:@"getNews"];
[parameters setValue:mails forKey:@"getMails"];...}

setValue:forKey:또는 사용하든 상관 없습니다. setObject:ForKey:항상 경고가 표시됩니다.

"세트의 인수 1 전달 ... 캐스트없이 정수에서 포인터를 만듭니다."...

도대체 어떻게 사전에 부울을 삽입하고 있습니까?


의 값은 NSDictionary집집합니다. 이 문제를 해결하기 위해 부울을 NSNumber해결 해야 합니다.

[parameters setValue:[NSNumber numberWithBool:news] forKey:@"news"];
[parameters setValue:[NSNumber numberWithBool:mails] forKey:@"mails"];

Objective-C 컨테이너는 Objective-C 개체 만 사용할 수 있으므로 개체에 BOOL을 래핑해야합니다. NSNumber를 생성 [NSNumber numberWithBool]하고 결과를 표현할 수 있습니다.
나중에 NSNumber를 사용하여 부울 값을 다시 사용할 수 있습니다 -boolValue.


BOOL은 수업이 아닙니다. int의 동의어이며 값으로 0 또는 1을 갖습니다. 결과적으로는 포함되는 구조에 놓이지 않을 것입니다.

NSNumber를 사용하여 모든 정수 유형에 대한 개체 래퍼를 만들 수 있습니다. [NSNumber numberWithBool:]를 얻기 위해 object-호출 할 수 있는 생성자 가 있습니다. 그리고 사용할 수 있습니다. 더 많은 것을 사용하여 [obj boolValue]..


참조를위한 최신 코드 :

parameters[@"getNews"] = @(news);

를 object- 삽입 @"YES"하거나 @"NO"문자열로 묶을 수 있으며 코코아는 다시 읽으면이를 부울로 캐스팅합니다.

명명 된 동일한 공장 방법을 사용하여 사전을 만드는 것이 좋습니다 dictionaryWithObjectsAndKeys:.


@Steve Harrison의 답변을 보면 한 가지 의견이 있습니다. 어떤 언어가 예를 들어 표현 속성을 전달하는 데 작동하지 않습니다.

 [parameters setValue:[NSNumber numberWithBool:myObject.hasNews] forKey:@"news"];

이것은 news매개 변수에서 키를 널 (null)로 설정합니다 NSDictionary(어떤 이유로 인해 그 이유를 실제로 이해할 수 없습니다 )

내 유일한 해결책은 다음과 같이 @Eimantas의 방식을 사용하는 것입니다.

[parameters setValue:[NSNumber numberWithBool:myObject.hasNews ? @"YES" : @"NO"] forKey:@"news"];

이것은 완벽하게 작동했습니다. BOOL직접 통과하는 것이 작동하지 않는 이유를 묻지. 그러나 주문을 찾았습니다. 어떤 아이디어?

참고 URL : https://stackoverflow.com/questions/2108042/objective-c-dictionary-inserting-a-bool

반응형