Ios NSMutableDictionary setValue:forKey有时失败
我使用NSMutableDictionary来保存3个键/值对。该值以NSNumber的形式表示为布尔值。 然后,我有一个加载数据的表视图,如果按下单元格,值将从“是”更改为“否”,反之亦然 除了字典中的最后一个键/值对之外,当按下单元格时,值似乎已正确更改Ios NSMutableDictionary setValue:forKey有时失败,ios,objective-c,nsdictionary,theos,cydia-substrate,Ios,Objective C,Nsdictionary,Theos,Cydia Substrate,我使用NSMutableDictionary来保存3个键/值对。该值以NSNumber的形式表示为布尔值。 然后,我有一个加载数据的表视图,如果按下单元格,值将从“是”更改为“否”,反之亦然 除了字典中的最后一个键/值对之外,当按下单元格时,值似乎已正确更改 NSMutableDictionary *modsDict; NSString *test = @"test"; NSString *test1 = @"test1"; NSString *test2 = @"test2"; - (voi
NSMutableDictionary *modsDict;
NSString *test = @"test";
NSString *test1 = @"test1";
NSString *test2 = @"test2";
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
NSString *key = [NSString stringWithFormat: @"%@", [[modsDict allKeys] objectAtIndex: indexPath.row]];
if (cell.accessoryType == UITableViewCellAccessoryNone) {
//enable
cell.accessoryType = UITableViewCellAccessoryCheckmark;
[modsDict setValue: [NSNumber numberWithBool: 1] forKey: key];
}
else {
cell.accessoryType = UITableViewCellAccessoryNone;
[modsDict setValue: [NSNumber numberWithBool: 0] forKey: key];
}
}
-(void)viewDidLoad {
%orig;
modsDict = [[NSMutableDictionary alloc] init];
[modsDict setObject: [NSNumber numberWithBool: 0] forKey:test];
[modsDict setObject: [NSNumber numberWithBool: 0] forKey:test1];
[modsDict setObject: [NSNumber numberWithBool: 0] forKey:test2];
... //init tableview
}
-(void)someMethodThatIHookTo {
NSNumber *val = [modsDict objectForKey: test2];
if ([val boolValue] == YES) {
//do something
}
//this works for test and test1, but for test2 it crashed
bool lol = [[modsDict objectForKey: test2] boolValue];
if (lol) {
//so something
}
else {
}
//else is always called
if ([[modsDict objectForKey: test2] boolValue]) {
}
else { }
//if statement always true, never goes to else
}
以下是我试图从NSDictionary中获取价值的三种方法
我正在执行[NSNumber numberWithBool:0/1],因为如果我使用“否/是”,即使使用“否”,它也会返回“是” 不管我按了多少次电池, 三种方法的结果是相同的 我怎样才能解决这个问题
请注意,我在THEOS,Mobilesubrate上使用这个作为一个调整。我认为您可能需要更仔细地阅读文档 以下是
allKeys
的文档说明:
讨论未定义数组中元素的顺序 考虑到这一点,您认为代码中的以下片段将产生什么结果
[[modsDict allKeys] objectAtIndex: indexPath.row]
这可能就是你发明迷信的原因,比如:
我正在执行[NSNumber numberWithBool:0/1],因为如果我使用“否/是”,即使使用“否”,它也会返回“是” 记录在案:
- 只使用
和@YES
是惯用用法李>@NO
和[NSNumber numberWithBool:0]
将返回不仅具有相同值的数字,而且由于与[NSNumber numberWithBool:NO]
布尔值相关的特殊情况,将返回具有完全相同标识的数字。对于NSNumber
/非零,同上是
代码的修复方法是停止对未定义顺序的事物的顺序进行假设。可能只是使用数组,因为不清楚为什么要使用字典。我认为您可能需要更仔细地阅读文档 以下是
allKeys
的文档说明:
讨论未定义数组中元素的顺序 考虑到这一点,您认为代码中的以下片段将产生什么结果
[[modsDict allKeys] objectAtIndex: indexPath.row]
这可能就是你发明迷信的原因,比如:
我正在执行[NSNumber numberWithBool:0/1],因为如果我使用“否/是”,即使使用“否”,它也会返回“是” 记录在案:
- 只使用
和@YES
是惯用用法李>@NO
和[NSNumber numberWithBool:0]
将返回不仅具有相同值的数字,而且由于与[NSNumber numberWithBool:NO]
布尔值相关的特殊情况,将返回具有完全相同标识的数字。对于NSNumber
/非零,同上是
代码的修复方法是停止对未定义顺序的事物的顺序进行假设。可能只是使用数组,因为不清楚为什么要使用字典。我认为您可能需要更仔细地阅读文档 以下是
allKeys
的文档说明:
讨论未定义数组中元素的顺序 考虑到这一点,您认为代码中的以下片段将产生什么结果
[[modsDict allKeys] objectAtIndex: indexPath.row]
这可能就是你发明迷信的原因,比如:
我正在执行[NSNumber numberWithBool:0/1],因为如果我使用“否/是”,即使使用“否”,它也会返回“是” 记录在案:
- 只使用
和@YES
是惯用用法李>@NO
和[NSNumber numberWithBool:0]
将返回不仅具有相同值的数字,而且由于与[NSNumber numberWithBool:NO]
布尔值相关的特殊情况,将返回具有完全相同标识的数字。对于NSNumber
/非零,同上是
代码的修复方法是停止对未定义顺序的事物的顺序进行假设。可能只是使用数组,因为不清楚为什么要使用字典。我认为您可能需要更仔细地阅读文档 以下是
allKeys
的文档说明:
讨论未定义数组中元素的顺序 考虑到这一点,您认为代码中的以下片段将产生什么结果
[[modsDict allKeys] objectAtIndex: indexPath.row]
这可能就是你发明迷信的原因,比如:
我正在执行[NSNumber numberWithBool:0/1],因为如果我使用“否/是”,即使使用“否”,它也会返回“是” 记录在案:
- 只使用
和@YES
是惯用用法李>@NO
和[NSNumber numberWithBool:0]
将返回不仅具有相同值的数字,而且由于与[NSNumber numberWithBool:NO]
布尔值相关的特殊情况,将返回具有完全相同标识的数字。对于NSNumber
/非零,同上是
代码的修复方法是停止对未定义顺序的事物的顺序进行假设。可能只是使用一个数组,因为不清楚您为什么要使用字典。您看到了什么错误?“我正在使用[NSNumber numberWithBool:0/1],因为如果我使用“否/是”,即使使用“否”,它也会返回为“是”。-假设您对Objective-C比较陌生,是否安全?事实并非如此。你现在对iOS编程不太熟悉,我建议你现在不要进入越狱开发。首先理清你的基本知识。@Tommy我无法得到错误,我手机上的日志没有显示任何错误。你看到了什么错误?“我正在做[NSNumber Withbool:0/1],因为如果我使用“否/是”,即使使用“否”,它也会返回为“是”。-假设你是Obj的新手,安全吗