0

我正在使用 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:]: unrecognized selector sent to instance 错误。我正在处理的应用程序包含一个收集简单信息的表格,如果我完全填写表格并打印我得到这个输出的值的内容:

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 尝试的方法不成功。感谢您的回复。

4

2 回答 2

0

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

于 2012-10-07T12:32:02.587 回答
0

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

于 2012-10-07T13:59:29.700 回答