iOS:从valueForKeyPath获取值

时间:2012-10-07 11:40:14

标签: objective-c ios xcode ios5

我正在使用IBAForms为我的项目创建一个简单的表单,除了从de字段获取值之外,我几乎已经实现了所有功能。我有这段代码:

    NSLog(@"SUBMIT");
id values = [[self formDataSource] modelValueForKeyPath:@"diabetePickListItem"];
for (id key in values){
    id values = [values objectForKey:key];

    NSString *keyString = (NSString *)key;
    NSLog(@"%@",keyString);
    NSString *valueString = (NSString *)values;
    NSLog(@"%@",valueString);
}

NSLog(@"diabetes %@", values);

它在控制台中给我这个输出:

2012-10-07 07:02:37.145 BigBlueTest[64483:10403] SUBMIT
2012-10-07 07:02:37.147 BigBlueTest[64483:10403] Yes
2012-10-07 07:02:37.148 BigBlueTest[64483:10403] (null)
2012-10-07 07:02:37.150 BigBlueTest[64483:10403] diabetes {(
Yes
)}

我不明白的是我如何从modelValueForKeyPath方法返回的值中获取密钥。我只想在不进行快速枚举的情况下得到“是”或“否”的值。我真的不知道我在这段代码中缺少什么。任何帮助将非常感激。提前谢谢。

修改

问题是,当我尝试使用objectAtIndex时,它给了我 - [__ NSCFSet objectAtIndex:]:无法识别的选择器发送到实例错误。我正在处理的应用程序包含一个表单来收集简单信息,如果我完全填写表单并打印值的内容我得到此输出:

NSLog(@"%@",_formValues);

2012-10-08 11:27:48.524 BigBlueTest[17285:10403] {
    activityPickListItem = "{(\n    Running/jogging\n)}";
    bloodAfter = 60;
    bloodBefore = 58;
    diabetePickListItem = "{(\n    Yes\n)}";
    durationPickListItem = "{(\n    10 or less\n)}";
    intensityPickListItem = "{(\n    Moderate\n)}";
    lowGlucoseSyntom = "{(\n    No\n)}";
    pickInsulinUse = "{(\n    Yes\n)}";
    pickMeasureUnit = "{(\n    mmol/L\n)}";
    recentMealPickListItem = "{(\n    30 minutes ago\n)}";
}

如果我使用valueForKeypath,那么我得到这种格式的值{(value)}。我还没有找到一种方法来获取字符串值。从NSDictionary和NSArray尝试的方法失败了。谢谢你的回复。

2 个答案:

答案 0 :(得分:0)

我不是Objective C中的老手,但是值不应该是数组吗?问题似乎与类型转换语句“(NSString *)values”有关,这看起来非常罕见且有点不对。我认为您应该使用不同的方法转换NSString中的值,因为它似乎返回NULL。也许你可以试试像 NSString *valueString = [NSString stringWithString:[values objectAtIndex:yourIndex](或使用NSRange获取更多对象)

答案 1 :(得分:0)

我对IBAForms并不熟悉,但看起来价值正在给你一个集合。我建议您在行id值之后设置一个断点...并查看返回值的内容。有时,上下文敏感的工具提示在XCode中不起作用。在这种情况下,您可以在调试窗口中键入po values。这应该可以让你更好地了解你正在处理的事情。