我使用JSONModel解析json,然后将其转换为NSArray以在UITableView
中使用它。
"<RSTweakItem> \n [name]: WhatAboutThis\n [version]: 1.2\n [packageID]: com.peterdev.whatabouthis\n</RSTweakItem>",
"<RSTweakItem> \n [name]: WhatAboutThis\n [version]: 1.2.1\n [packageID]: com.peterdev.whatabouthis\n</RSTweakItem>"
这是json数据的一部分,已通过NSArray
转换为JSONModel
。
如您所见,它们具有相同的名称和packageID,但版本不同。
因此,我想检查packageID
以确保它是相同的程序包,然后删除数据的旧版本并仅保留数据的最新版本。
这就是我为UITableView
设置数据的方式。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
RSTweakCell *cell = [tableView dequeueReusableCellWithIdentifier:@"RSTweakCell" forIndexPath:indexPath];
RSTweakItem *model = self.listTweak[indexPath.row];
cell.textLabel.text = model.name;
cell.detailTextLabel.text = model.version;
cell.packageID = model.packageID;
return cell;
}
答案 0 :(得分:0)
NSArray<RSTweakItem> *models = @[];//parse from json
NSMutableArray *packageIDs = [[models valueForKey:@"packageID"] mutableCopy];//get all packageIDs
NSMutableArray *newModels= [NSMutableArray new];//for unique last versions of RSTweakItem
while (packageIDs.count > 0) {
NSString *pID = packageIDs.firstObject;
//get all objects packageIDs equal pID
NSArray *filteredAray = [models filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF.packageID like %@", pID]];
if(filteredAray.count > 0) {
// sort to get lates version
NSArray *sorteArray = [filteredAray sortedArrayUsingComparator:^NSComparisonResult(RSTweakItem *obj1, RSTweakItem *obj2) {
return [obj1.version compare:obj2.version];
}];
[newModels addObject:sorteArray.lastObject];
}
[packageIDs removeObject:pID];
}