1

我在这里遗漏了一些东西,我知道这并不难,但我没有得到它。我有一个字典列表。它被加载到一个可变数组中,然后填充我的 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>

我正在尝试访问这些字典值,但我很困惑。

这是我的初始化:

static NSString *kTitleKey = @"title";
static NSString *kCheckedState = @"checkState";

@interface ViewController ()

@end

@implementation ViewController

@synthesize attributesTableView, attributesArray;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nil bundle:nil];
    if (self) {
        NSString *attributesFile = [[NSBundle mainBundle] pathForResource:@"attributesPlist"ofType:@"plist"];

        attributesArray = [[NSMutableArray alloc] initWithContentsOfFile:attributesFile];

    }
    return self;
}

跳到相关位,我正在填充我的 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 的键值编码。

我知道我只是错误地访问它,但我不确定当我使用一个充满可变字典的可变数组时我是如何做到的。

4

1 回答 1

2

我认为您设置值的语法已关闭。在您发布的最后一个代码段中,您有以下内容:

[attributesArray valueForKey:kTitleKey = @"All"]

与您的想法相反,这并没有将标题设置为“全部”;相反,它将值替换为kTitleKey字符串“All”,然后从属性数组中获取“All”的值。相反,我认为你想要类似的东西:

[attributesArray setValue:@"All" forKey:kTitleKey]

您必须在最后一个示例中进行类似的更新。请记住这里的关键区别:

  • valueForKey: 得到一个值。valueForKey:即使您输入一些等号,您也永远无法使用 设置某些内容。
  • setValue:forKey: 设置一个值。每当您需要更改时,您都会想使用它attributesArray

您可能想阅读键值编码以获取更多信息。

于 2012-11-19T20:13:09.337 回答