我在这里遗漏了一些东西而且我知道它并不难,但我没有得到它。我有一本词典。它被加载到一个可变数组中,然后填充我的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。&#39;
我知道我只是错误地访问了它,但当我使用填充了可变字典的可变数组时,我不确定我是怎么做到的。
答案 0 :(得分:2)
我认为您设置值的语法已关闭。在您发布的最后一个代码段中,您有:
[attributesArray valueForKey:kTitleKey = @"All"]
与您的想法相反,这并未将标题设置为“全部”;相反,它用字符串“All”替换kTitleKey
的值,然后从attributes数组中获取“All”的值。相反,我认为你想要这样的东西:
[attributesArray setValue:@"All" forKey:kTitleKey]
您必须在最后一个示例中进行类似的更新。请记住这里的关键区别:
valueForKey:
获取值。你永远不能使用valueForKey:
设置某些内容,即使你输入了一些等号。setValue:forKey:
设置值。您需要在需要更改attributesArray
时使用此功能。您可能需要阅读key-value coding以获取更多信息。