0

ブール型を取得していませんか?

これが私のコードです。何が間違っていますか?

id val = [ dict objectForKey:key ];

if ([ val isKindOfClass:[ NSString class ] ] )
   print "string";
else if( [ val  isKindOfClass:[ NSNumber class ] ] )
   print "number";
else if( [ val  isKindOfClass:[ BOOL class ] ] )
   print "bool";

ブール型を取得していません。

4

2 に答える 2

1

オブジェクトではないため、BOOL値を直接保存することはできません。NSDictionaryしたがって、最初に変更してNSNumberから保存してからNSDictionary、を比較するisKindOfClass:[NSNumber Class]代わりに比較する必要があり[BOOL class]ます。

例:-

BOOL value = YES;
NSDictionary *dict = [[NSDictionary alloc]initWithObjectsAndKeys:[NSNumber numberWithBool:value],@"Bool", nil];

id val = [dict valueForKey:@"Bool"];
if([val isKindOfClass:[NSNumber class]])
{
    //NSNumber Class
}

編集:

BOOL値をNSString直接キャストすることはできません。BOOLフォーマットで価値が必要な場合NSStringは、独自のメソッドを作成する必要があります。これは、を使用したこの小さな例ですmacro

値をmacroキャストするクラスでこれを定義します。BOOLNSString

#define NSStringFromBOOL(aBOOL) aBOOL? @"YES" : @"NO"

次に、これを単に呼び出します-

NSString *bool_string = NSStringFromBOOL(YES);
NSLog(@"%@",bool_string);

YES'1'の代わりに印刷されます。

于 2012-10-20T10:58:07.933 に答える
0

BOOLクラスでもObjective-Cオブジェクトタイプでもありません。これは、C プリミティブ型 ( ) から型定義されたスカラーsigned charです。このままでは使えません。

于 2012-10-20T10:53:27.443 に答える