我是iOS新手,我工作的项目需要将json解析为本地数据库。
情况是我必须首先遍历多个http请求并生成一个NSDictionary数组。我有一个使用Dictionary插入对象的方法。
for (NSNumber *cd_id in self.deviceIDList) {
NSURL *getDeviceUrl = [NSURL URLWithString:[NSString stringWithFormat:@"http://api.abc.com/v2/devices/%@/?session_key=123",cd_id]];
NSURLSessionDataTask *deviceTask = [[NSURLSession sharedSession] dataTaskWithURL:getDeviceUrl completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
[self processDeviceData:data];
}];
[deviceTask resume];
}
- (void)processDeviceData:(NSData *)data{
NSError *JSONError = nil;
NSDictionary *deviceDetail = [NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingAllowFragments
error:&JSONError];
[self.deviceDetailList addObject:deviceDetail];
if (JSONError) {
NSLog(@"json data = %@", deviceDetail);
}
}
processDeviceData方法只是从json创建字典并将它们放入一个数组中。但是,我无法创建 deviceDetailList 数组。
这是正确的方法吗?
答案 0 :(得分:0)
因此,您已拥有属性deviceDetailList
,该属性应为NSMutableArray
。在这个类的init
方法中,您应该创建一个空数组实例:
self.deviceDetailList = [NSMutableArray array];
然后在任务完成块中,您应该使用GCD切换回主线程来更新阵列:
dispatch_async(dispatch_get_main_queue(), ^(void){
[self processDeviceData:data];
// probably trigger a UI update here...
});