gpt4 book ai didi

ios - NSMutableDictionary setValue :forKey failing sometimes

转载 作者:行者123 更新时间:2023-11-28 19:59:03 25 4
gpt4 key购买 nike

我正在使用 NSMutableDictionary 来保存 3 个键/值对。该值为 NSNumber 形式的 bool。然后我有一个加载数据的 TableView ,如果按下单元格,值将从 YES 更改为 NO,反之亦然。

似乎在按下单元格时值被正确更改,除了字典中的最后一个键/值对

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],因为如果我使用 NO/YES,即使使用 NO,它也会返回 YES。

无论我按了多少次手机,3种方式的结果是一样的...

我该如何解决这个问题?

请注意,我在 THEOS 和 mobilesubtrate 上使用它作为调整。

最佳答案

我认为您可能需要更加努力地阅读文档。

allKeys 的文档是这样说的:

Discussion
The order of the elements in the array is not defined.

考虑到这一点,您认为您的代码中的以下片段会产生什么结果?

[[modsDict allKeys] objectAtIndex: indexPath.row]

这可能就是您发明迷信的原因,例如:

I am doing [NSNumber numberWithBool: 0/1] because if I use NO/YES it would return as YES even if NO is used.

备案:

  • 只是使用@YES@NO 是惯用的;
  • [NSNumber numberWithBool:0][NSNumber numberWithBool:NO] 不仅会返回相同值的数字,还会返回具有完全相同身份的数字,因为与 NSNumber bool 值相关的特例。 YES/非零也是如此。

您的代码的修复是停止对具有未定义顺序的事物的顺序做出假设。可能只使用一个数组,因为不清楚你为什么要使用字典。

关于ios - NSMutableDictionary setValue :forKey failing sometimes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24978781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com