Ios 对访问数组中的可变字典感到困惑吗
我错过了一些东西,我知道这并不难,但我不明白。我有一大堆字典。它被加载到一个可变数组中,然后填充我的tableView plist样本:Ios 对访问数组中的可变字典感到困惑吗,ios,nsmutablearray,nsmutabledictionary,Ios,Nsmutablearray,Nsmutabledictionary,我错过了一些东西,我知道这并不难,但我不明白。我有一大堆字典。它被加载到一个可变数组中,然后填充我的tableView plist样本: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>title</key>
<string>entry1</string>
<key>checkedState</key>
<string>NO</string>
</dict>
<dict>
<key>title</key>
<string>accessoriesImage</string>
<key>checkedState</key>
<string>NO</string>
</dict>
<dict>
<key>title</key>
<string>activationCharge</string>
<key>checkedState</key>
<string>NO</string>
</dict>
跳到相关的部分,我将用以下内容填充我的tableView单元格:
cell.textLabel.text = [[attributesArray objectAtIndex:[indexPath row]] valueForKey:kTitleKey];
稍后在didSelectRowAtIndexPath中,我尝试检查那些字典值,这就是我失败的地方
例如:
if ([[attributesArray valueForKey:kTitleKey = @"All"] valueForKey:kCheckedState = @"YES"]) {
[attributesArray setValue:kCheckedState = @"NO" forKey:@"All"];
[attributesArray setValue:kCheckedState = @"YES" forKey:[[attributesArray objectAtIndex:[indexPath row]] valueForKey:kTitleKey]];
我收到以下错误:valueForUndefinedKey:]:该类不符合关键字YES的键值编码要求。
我知道我只是错误地访问了它,但当我使用一个充满可变字典的可变数组时,我不确定我是如何做到这一点的 我认为您设置值的语法已关闭。在您发布的上一个代码段中,您有以下内容:
[attributesArray valueForKey:kTitleKey = @"All"]
与您可能认为的相反,这并没有将标题设置为“全部”;相反,它用字符串“All”替换kTitleKey
的值,然后从属性数组中获取“All”的值。相反,我认为你想要的是:
[attributesArray setValue:@"All" forKey:kTitleKey]
在最后一个示例中,您必须进行类似的更新。记住这里的关键区别:
获取一个值。您永远不能使用valueForKey:
设置某些内容,即使您在其中输入了一些等号valueForKey:
设置一个值。无论何时需要更改setValue:forKey:
,您都会希望使用此选项属性数组
您可能想继续阅读了解更多信息。不确定您的答案是否有意义。在我的最后一段代码中,我正在测试title=ALL和checkedState=YES。如果这是真的,我正在尝试将所有标题的checkedState设置为NO。然后我将表中选定的行的checkedState设置为YES。两个不相关的功能,但都做相似的事情。啊。在这种情况下,您的代码仍然有点不正确—回想一下,Objective-C字符串相等性测试是通过调用
IseQualtString:
完成的,因此您可以执行类似于的操作,如果([[AttributeArray valueForKey:kTitleKey]IseQualtString:@“All”]&&……
)。
[attributesArray setValue:@"All" forKey:kTitleKey]