Cba*_*bas 1 objective-c nsdictionary
我需要一个指向布尔值的字符串字典.
我有一个像我这样创建的NSDictionary工具状态
NSArray *keys = [NSArray arrayWithObjects:@"X", @"Y", nil];
NSArray *isActive = [NSArray arrayWithObjects:[NSNumber numberWithBool:NO], [NSNumber numberWithBool:YES], nil];
toolStates = [NSDictionary dictionaryWithObjects:isActive forKeys:keys];
Run Code Online (Sandbox Code Playgroud)
在我班上的其他地方,我试图检索并比较像这样的booean值
if ([toolStates valueForKey: @"X"] == [NSNumber numberWithBool:NO]) NSLog(@"%s", "X = NO");
Run Code Online (Sandbox Code Playgroud)
我知道代码的两个部分都在运行,但是在输出的if语句中出现"EXC_BAD_ACCESS"错误:
<Error>: CGAffineTransformInvert: singular matrix.
Run Code Online (Sandbox Code Playgroud)
比较有什么问题吗?
我尝试这个时遇到同样的错误:
[toolStates setValue:[NSNumber numberWithBool:YES] forKey:@"X"];
Run Code Online (Sandbox Code Playgroud)
Con*_*ltz 12
你所写的内容存在一些问题,但我认为它们都不对你的直接问题负责(见下文).让我们来看看一些问题.
[toolStates setValue:forKey:]不能像书面那样工作,因为你有NSDictionary,而不是NSMutableDictionary.-valueForKey:返回id(即它将返回你的NSNumber实例,而不是a BOOL.因此,你的比较是不正确的.你==正在进行指针比较,这不是你想要的.(如果被优化以返回单例,那么它可能在这里工作但不是你应该指望的行为.)在Objective-C中进行相等比较的正确方法是方法,例如.NSNumber+numberWithBool:-isEqual:if ([[toolStates valueForKey:@"X"] isEqual:[NSNumber numberWithBool:NO])但是你得到的EXC_BAD_ACCESS通常意味着你正在访问一个解除分配的对象.我怀疑你得到的是与Core Graphics相关的错误,这与你的代码无关(建议你的垃圾指针现在指向图形相关的东西).
你在用ARC吗?如果没有,我看不到你留toolStates在任何地方.如果你不是,并且在下一轮运行循环(听起来像)后你正在访问它,那么你会发现崩溃.如果这听起来不对,或者您找不到问题,请尝试以下操作:
| 归档时间: |
|
| 查看次数: |
9815 次 |
| 最近记录: |