gpt4 book ai didi

iphone - 如何在 iOS 中使用动态部分对 tableview 进行分组

转载 作者:行者123 更新时间:2023-12-01 18:26:17 28 4
gpt4 key购买 nike

我调用一个网络服务并得到一个不错的 JSON 作为返回。此 JSON 列出了几个带有类别的报告。

最大的问题是我如何用它制作一个漂亮的 tableview,按类别分组。我是 iOS 新手,我真的被困在这一点上。

我将json保存在这样的数组中:

tableData = [NSJSONSerialization JSONObjectWithData:dataWebService options:kNilOptions error:&error];

然后我对列表进行排序:
NSArray *sortedArray;
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"Category" ascending:YES];
sortedArray = [tableData sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]];

我得到的json是这样的:
{
Category = Faktura;
about = "Fakturablankett med giro med utvalg p\U00e5 fra-til fakturanr";
name = Faktura;
reportendpoint = "https://unionline.unimicro.no/uni24Report/Report.aspx";
reportid = 16;
},
{
Category = Faktura;
about = "Fakturablankett med giro med utvalg p\U00e5 fra-til fakturanr";
name = "Faktura med sidenummer";
reportendpoint = "https://unionline.unimicro.no/uni24Report/Report.aspx";
reportid = 19;
},
{
Category = Faktura;
about = "Liste over fakturaer med status og mva-detaljer. Utvalg p\U00e5 fra-til fakturanr.";
name = Fakturajournal;
reportendpoint = "https://unionline.unimicro.no/uni24Report/Report.aspx";
reportid = 15;
},
{
Category = "Journaler og Kontoutskrifter";
about = "";
name = "Kontoutskrift hovedbok";
reportendpoint = "https://unionline.unimicro.no/uni24Report/Report.aspx";
reportid = 4;
},
{
Category = "Journaler og Kontoutskrifter";
about = "";
name = "Kontoutskrift kunder";
reportendpoint = "https://unionline.unimicro.no/uni24Report/Report.aspx";
reportid = 5;
}

我想在表格 View 中列出这些“名称”,按“类别”分组。我需要对类别进行排序,列出属于这些类别的报告。

还有更多类别,但我没有全部粘贴。

最佳答案

您必须创建一个具有类别数组列表的全局数组。

要使用称为 category-arrays 的元素创建全局数组,使用 didReceiveResponseJson:nameDitionaryAllReadyExist:方法。

在 UITableView 中查看以上 json 数据:

NSMutableArray* tableArray;//Declare this array globally and allocate memory in viewdidload

-(NSMutableArray *)nameDitionaryAllReadyExist:(NSString *)name {

for(NSMutableArray *nameArray in tableArray){

for(NSDictionary* nameDict in nameArray) {
if([[nameDict objectForKey:@"Category"] isEqualToString:name])

//return the existing array refrence to add
return nameArray;
}
}

// if we dont found then we will come here and return nil
return nil;
}

-(void)didReceiveResponseJson:(NSArray *)jsonArray {

for(NSDictionary* nameDict in jsonArray) {

NSMutableArray* existingNameArray=[self nameDitionaryAllReadyExist:[nameDict objectForKey:@"Category"]];
if(existingNameArray!=nil) {
//if name exist add in existing array....
[existingNameArray addObject:nameDict];
}
else {
// create new name array
NSMutableArray* newNameArray=[[[NSMutableArray alloc] init] autorelease];
// Add name dictionary in it
[newNameArray addObject:nameDict];

// add this newly created nameArray in globalNameArray
[tableArray addObject:newNameArray];
}
}

//so at the end print global array you will get dynamic array with the there respetive dict.
NSLog(@"Table array %@", tableArray);
}

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

tableArray=[[NSMutableArray alloc] init];

NSString* path=[[NSBundle mainBundle] pathForResource:@"JsonData" ofType:@"json"];

NSDictionary* tableData=[NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:path] options:kNilOptions error:nil];

//NSLog(@"Table Array- %@",tableData);

NSArray* dataArray = [tableData objectForKey:@"data"];

[self didReceiveResponseJson:dataArray];
}

#pragma mark
#pragma mark UITableViewDataSource

//@required

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

NSArray* array=[tableArray objectAtIndex:section];
return [array count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

NSArray* array=[tableArray objectAtIndex:indexPath.section];

NSDictionary* item=[array objectAtIndex:indexPath.row];
NSString* name=[item valueForKey:@"name"];

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"];
if (cell == nil) {
// No cell to reuse => create a new one
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"UITableViewCell"] autorelease];
// Initialize cell
}

// Customize cell
cell.textLabel.text = name;

return cell;
}

//@optional

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

return [tableArray count];
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {

NSArray* array=[tableArray objectAtIndex:section];
if([array count]) {
NSDictionary* item=[array objectAtIndex:0];
return [item valueForKey:@"Category"];
}
else
return nil;
}

关于iphone - 如何在 iOS 中使用动态部分对 tableview 进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13517515/

28 4 0
文章推荐: objective-c - nslog可以打印变量,但是变量不保存值吗?
文章推荐: iphone - 删除应用程序后按下 CFUUIDRef
文章推荐: java - Android 将 ArrayList 保存为 SharedPreference