Objective-C中的BOOL问题

LB.*_*LB. 2 objective-c

当我试图从字典中获取BOOL时,我得到:

BOOL isTrue = [someDict objectForKey: @"isTrue"];
Run Code Online (Sandbox Code Playgroud)

我明白了:

Initialization makes integer from pointer without a cast
Run Code Online (Sandbox Code Playgroud)

我通过这样设置字典:

self.someDict = [[NSMutableDictionary alloc]
    initWithObjectsAndKeys:
        self.isTrue, @"isTrue",
        nil];
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Dav*_*ong 19

使用:

BOOL isTrue = [[someDict objectForKey:@"isTrue"] boolValue];
Run Code Online (Sandbox Code Playgroud)

在a BOOL中存储a的唯一方法NSDictionary是将其装入NSNumber对象中.A BOOL是原始的,字典只保存对象.

同样,要BOOL在字典中存储a ,请使用:

[someDict setObject:[NSNumber numberWithBool:isTrue] forKey:@"isTrue"];
Run Code Online (Sandbox Code Playgroud)

编辑:(回应评论)

有两种方法可以将其表示为@property.一种是将ivar声明为a BOOL,另一种是将其声明为a NSNumber.

对于第一种情况,ivar是: BOOL isTrue;和属性是@property BOOL isTrue;(我忽略了命名约定,显然).

对于NSNumber,伊瓦尔是:NSNumber * isTrue;和财产是@property (nonatomic, retain) NSNumber * isTrue;.如果您有这条路线走,你可能要提供第二setter方法(setIsTrueBool或某事),让您刚刚传递YESNO,然后你就拳击自己.否则任何打电话的人都必须自己做拳击.

我个人很可能选择#1选项,但这实际上取决于课程的目的.