2012-10-27 4 views
1

NSMutableDictionary에 bool 값을 저장해야하므로 해결책을 찾았습니다 : [NSNumber numberWithBool]을 사용하여 bool에서 객체를 만듭니다. 값이 YES 인 경우에는 문제가 없지만 때로는 제대로 작동하지 않고 때로는 결과가 "Object-C 오브젝트가 아닙니다"라는 결과가 나타납니다. MyCode :NSNumber numberWithBool이 objective-c 객체가 아닙니다.

$ //sometimes fine, but sometimes "not an objective-c object" 
$ NSNumber* nsn = [NSNumber numberWithBool:NO]; 

나는 목표 - C에 새로 온 사람, 그래서 이것은 기본적인 문제가 있다면 미안하지만 난 정말 그것으로 붙어. 도움 주셔서 감사합니다.

+0

NSNumber 1 또는 0을 저장하지 말고 (numberWithBool을 통하지 않고 직접 사용하십시오.) '[storedNSNumber boolValue]' – Lukas1

+0

이것은 정말 간단하고 효과적인 해결책이며 사용하게 될 것입니다. 그것. 하지만 이제는이 동작을 이해하고 싶습니다.) – noktigula

+4

'numberWithBool :'메시지를 NSNumber 클래스에 보내는 것은 항상 객체, 특히'__NSCFBoolean' 인스턴스를 반환합니다. 문제는 다른 곳에 있어야합니다. "객관적이지 않은 목적"이라는 메시지를 언제 받습니까? 더 많은 코드를 게시하십시오. –

답변

0

numberWithBoolinitWithBool에 의해 반환 된 개체는 NSNumber를 문자열로 초기화하는 것으로 보이며 사전에 개체를 매핑하면 NSValue이 실제로 null입니다. 따라서 사전은 그것을 null로 말할 것입니다.

NSObject * y1 = @(YES) ; 
NSObject * n1 = @(NO) ; 
NSObject * y2 = @YES ; 
NSObject * n2 = @NO ; 

또 다른 예 :

0

이 중 하나 봅니다

NSDictionary * testDict = @{ 
    @"key1": @YES 
, @"key2": @NO 
} ; 

BOOL b = [testDict[@"key1"] boolValue] ; 
0

야합니다. 너 자신의 수업을 만들면 어떨까?

@interface Fool 
{ 
    bool _amIFool; 
} 
@property bool amIFool; 
@end 

@implementation 
-(bool)amIFool 
{ 
    return _amIFool; 
} 

-(void)setAmIFool:(bool)amIFool 
{ 
    _amIFool = amIFool 
} 

@end 

그런 다음 사전에 밀어 넣을 수 있습니다. 위의 코드는 예제 일뿐입니다. 당신은 더 나은 것을 쓸 수 있습니다 ....

EDIT : 당신도 직접 비교와 물건을 할 수 있도록 비교기를 작성할 수 있습니다. 그리고 심지어는 편리한 메소드를 작성하여 초기화하기가 쉽습니다 ...

EDIT : 그냥 초기 구현을 "차갑게"라고했습니다. 그러나 나는 냉담하지 않기 때문에, 나는 바보를 선택했다. 둘 중 하나를 할 수 있습니다.