Ios 对访问数组中的可变字典感到困惑吗

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">

我错过了一些东西,我知道这并不难,但我不明白。我有一大堆字典。它被加载到一个可变数组中,然后填充我的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">
<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]