我在这里已经完成了一些问题,并尝试了其他人给出的一些建议,但似乎都没有。基本上我从我的webservice收到了JSON数据,并填充了一个我希望放入UITableViewCell的数组。但我的问题是tableview单元格只显示我的数组中的一条记录。我需要将所有记录显示为用户的列表视图。
这是我的Web服务解析JSON数组:
NSData *data = [soapResultsString dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSArray *planArray = [json objectForKey:@"plan_type"];
NSLog(@"planArray==>%@",planArray);
NSLog(@"planArrayCount==>%d",[planArray count]);
for (int i = 0 ; i<[planArray count]; i++) {
NSLog(@"print==>%d",i);
recordResults = NO;
appDelegate.nameString = [[[json valueForKey:@"plan_type"]valueForKey:@"name"]objectAtIndex:i];
appDelegate.ageString=[[[json valueForKey:@"plan_type"]valueForKey:@"age"]objectAtIndex:i];
appDelegate.sexString=[[[json valueForKey:@"plan_type"]valueForKey:@"sex"]objectAtIndex:i];
appDelegate.deptString=[[[json valueForKey:@"plan_type"]valueForKey:@"dept"]objectAtIndex:i];
NSLog(@"name==%@,age==%@,sex==%@,dept==%@",appDelegate.nameString,appDelegate.ageString,appDelegate.sexString,appDelegate.deptString);
}
现在这里是tableview部分。我有一个视图控制器我从插座放置Uitableview然后我从自定义UITableViewCell合并UITableViewCell。 这是我的tableview单元格编码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
mobilePlanDetailsCellTableViewCell *mobPlan = (mobilePlanDetailsCellTableViewCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (mobPlan == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"mobilePlanDetailsCellTableViewCell" owner:self options:nil];
mobPlan = [nib objectAtIndex:0];
}
mobPlan.nameLabel.text = appDelegate.nameString;
mobPlan.ageLabel.text =appDelegate.ageString;
mobPlan.sexLabel.text =appDelegate.sexString;
mobPlan.deptLabel.text =appDelegate.sexString;
return mobPlan;
}
那么,您能告诉我如何将我的Web服务JSON中的所有数据加载到UITableViewCell中吗?
这是我的NSLog输出:
2015-01-07 10:41:00.145 AmslideMenu[430:5779] planArrayCount==>68
2015-01-07 10:41:00.145 AmslideMenu[430:5779] print==>0
2015-01-07 10:41:00.146 AmslideMenu[430:5779]name==james,age==17,sex==male,dept==civil
2015-01-07 10:41:00.146 AmslideMenu[430:5779] print==>1
2015-01-07 10:41:00.146 AmslideMenu[430:5779]name==rahul,age==17,sex==male ,dept==IT
2015-01-07 10:41:00.146 AmslideMenu[430:5779]print==>2
2015-01-07 10:41:00.146 AmslideMenu[430:5779]name==ramesh,age==18,sex==male,dept==Mechanic
答案 0 :(得分:0)
首先创建一个属性来保存数据,
@property (nonatomic, strong) NSArray *dataArray;
创建一个NSObject
子类来表示一组属性,如name,age和all。
@interface User : NSObject
// Properties
@property (nonatomic, strong) NSString *name;
@property (nonatomic, assign) NSInteger age;
@end
然后在for循环中创建User
对象并将其添加到dataArray
for (int i = 0 ; i<[planArray count]; i++) {
recordResults = NO;
User *user = [User alloc] init];
user.nameString = [[[json valueForKey:@"plan_type"]valueForKey:@"name"]objectAtIndex:i];
user.ageString=[[[json valueForKey:@"plan_type"]valueForKey:@"age"]objectAtIndex:i];
user.sexString=[[[json valueForKey:@"plan_type"]valueForKey:@"sex"]objectAtIndex:i];
user.deptString=[[[json valueForKey:@"plan_type"]valueForKey:@"dept"]objectAtIndex:i];
[_dataArray addObject:user];
}
然后访问该数组以填充tableView。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{ static NSString * CellIdentifier = @&#34; Cell&#34 ;;
mobilePlanDetailsCellTableViewCell *mobPlan = (mobilePlanDetailsCellTableViewCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (mobPlan == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"mobilePlanDetailsCellTableViewCell" owner:self options:nil];
mobPlan = [nib objectAtIndex:0];
}
User *user = [_dataArray objectAtIndex:indexPath.row];
mobPlan.nameLabel.text = user.nameString;
mobPlan.ageLabel.text = user.ageString;
mobPlan.sexLabel.text = user.sexString;
mobPlan.deptLabel.text = user.sexString;
return mobPlan;
}
答案 1 :(得分:0)
我认为这是因为您不了解如何存储值以及tableview的dataSource。
也许你的数据源和tableview是分开的。
您应该将值存储到数组中,就像现在一样,您可以在appDelegate中声明一个数组。
@property NSArray * planTypes;
执行此操作时,您可以更改为
NSMutableArray *dataSource = [NSMutableArray arrayWithCapacity:planArray.count];
for (int i = 0 ; i<[planArray count]; i++) {
NSLog(@"print==>%d",i);
recordResults = NO;
NSString *nameString = [[[json valueForKey:@"plan_type"]valueForKey:@"name"]objectAtIndex:i];
NSString *ageString=[[[json valueForKey:@"plan_type"]valueForKey:@"age"]objectAtIndex:i];
NSString *sexString=[[[json valueForKey:@"plan_type"]valueForKey:@"sex"]objectAtIndex:i];
NSString *deptString=[[[json valueForKey:@"plan_type"]valueForKey:@"dept"]objectAtIndex:i];
generally, we create n modelClass like STPerson {@property name, xxx...},and value the person
NSDictionary *dictionary = @{@"name":nameString, @"age":ageString,...};
[dataSource addObject:dictionary];
}
the most important comes:
// you store values into appDelegate
appDelegate.planTypes = dataSource;
存储值后,您应该覆盖UITableViewDataSource
中的一些方法- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return appDelegate.planTypes.count;
}
修改你的cellForRow方法:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
mobilePlanDetailsCellTableViewCell *mobPlan = (mobilePlanDetailsCellTableViewCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (mobPlan == nil){
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"mobilePlanDetailsCellTableViewCell" owner:self options:nil];
mobPlan = [nib objectAtIndex:0];
}
NSDictionary *plan = appDelegate.planTypes[indexPath.row];
mobPlan.nameLabel.text = plan[@"name"];
mobPlan.ageLabel.text = plan[@"age"];
mobPlan.sexLabel.text = plan[@"sex"];
mobPlan.deptLabel.text = plan[@"dept"];
return mobPlan;
}