【发布时间】:2012-11-30 05:17:46
【问题描述】:
我设计了一个应用,它有一个按钮和三个标签。
按下按钮时,会调用一个 URL。 URL 的 JSON 表示如下:
[
{
"_id": "50c87e8a1898044ea1458e4c",
"value": "10",
"time": "12:10",
"date": "12.12.12"
},
{
"_id": "50c87f311898044ea1458e4d",
"value": "12",
"time": "13:15",
"date": "12.12.12"
}
]
我的应用中还有三个标签,分别显示值、时间和日期。
我的应用代码如下:
-(IBAction)getrequest:(id)sender
{
NSURL *url =[NSURL URLWithString:@"http://localhost:3000/lights"];
NSData* data = [NSData dataWithContentsOfURL:url];
//fetch the data to the JSON Foundation opject.
[self performSelectorOnMainThread:@selector(fetchedData:)
withObject:data waitUntilDone:YES];
}
- (void)fetchedData:(NSData *)responseData {
NSError *e = nil;
NSMutableArray *json = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:&e];
NSLog(@"%@", json);
[self processData:json];
}
-(void)processData:(NSDictionary *) JSONObject{
NSString *value = [JSONObject valueForKey:@"value"];
NSString *date = [JSONObject valueForKey:@"date"];
NSString *time = [JSONObject valueForKey:@"time"];
NSLog(@"value: %@", value);
NSLog(@"date: %@", date);
NSLog(@"time: %@", time);
_value.text = value;
_date.text = date;
_time.text = time;
}
代码编译和构建没有任何错误,但是当我在模拟器中按下按钮时,出现如下异常:
2012-12-12 14:16:21.115 Sensor_visulization[7956:11303] value: (
10,
12
)
2012-12-12 14:16:21.116 Sensor_visulization[7956:11303] date: (
"12.12.12",
"12.12.12"
)
2012-12-12 14:16:21.116 Sensor_visulization[7956:11303] time: (
"12:10",
"13:15"
)
2012-12-12 14:16:21.116 Sensor_visulization[7956:11303] -[__NSArrayI isEqualToString:]: unrecognized selector sent to instance 0x7191a30
2012-12-12 14:16:21.117 Sensor_visulization[7956:11303] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI isEqualToString:]: unrecognized selector sent to instance 0x7191a30'
我的 json 解析器有问题吗?
我可以将所有的值、时间、日期存储在一个数组中吗?
并在标签上显示数组中的最后一项?
任何帮助将不胜感激。
【问题讨论】:
-
一切看起来都很好,除了最后,您尝试将
_value.text(可能是NSString属性)设置为value(这是一个数组,而不是字符串)。您希望在NSString中表示数组的精确度如何?你可以做_value.text = [value description];或_value.text = [value componentsJoinedByString:@", "];或其他。 -
@Rob 我通过下面描述的方法让它工作了。不过还是谢谢。但是我怎样才能在一个数组中获取所有值,并且始终在一个单独的数组中获取所有值并绘制一个图表,一个轴上的值和另一个轴上的时间?
-
查看我更新的答案,其中显示了如何保存三个单独的数组(以及检索 UI 控件的最后一个对象)。关于图表的草图,这取决于您如何绘制图表,这是一个完全不同的问题。为此,我建议您提交关于该主题的另一个问题,展示您在绘制此数据方面尝试过的示例。但希望我们已经解决了您关于如何获取值数组的问题。
-
顺便说一句,如果这是针对具有单独日期和时间数组的图表应用程序,则可能并不完全有用。您可能希望将这两个组合成一个日期时间对象数组(可能是
NSDate对象)。有关如何组合它们的示例,请参阅我的更新答案。