我正在使用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尝试的方法失败了。谢谢你的回复。
答案 0 :(得分:0)
我不是Objective C中的老手,但是值不应该是数组吗?问题似乎与类型转换语句“(NSString *)values
”有关,这看起来非常罕见且有点不对。我认为您应该使用不同的方法转换NSString
中的值,因为它似乎返回NULL
。也许你可以试试像
NSString *valueString = [NSString stringWithString:[values objectAtIndex:yourIndex]
(或使用NSRange
获取更多对象)
答案 1 :(得分:0)
我对IBAForms并不熟悉,但看起来价值正在给你一个集合。我建议您在行id值之后设置一个断点...并查看返回值的内容。有时,上下文敏感的工具提示在XCode中不起作用。在这种情况下,您可以在调试窗口中键入po values
。这应该可以让你更好地了解你正在处理的事情。