我有一个从JSON查询创建的NSMutableDictionary,在浏览器中运行json查询,输出按字母顺序排列,我需要它,并使用NSLOG以正确的顺序显示它验证这一点。但是,当我填充UITableView单元格时,订单完全不同,但我希望保留原始订单。
我理解字典不是为了排序而设计的,我可以映射到一个新的排序数组但是如果我这样做(如果这是实现这个的正确方法?),目前还不清楚如何解决正确的键和索引细节视图。有什么想法吗?感谢。
创建JSON数据和创建表格单元格的代码如下:
- (void) makeData {
//Define dictionary
fullDictionary = [[NSMutableDictionary alloc] init];
//parse JSON data from a URL into an NSArray
NSString *urlString = [NSString stringWithFormat:@"http://<JSON feed goes here>"];
NSURL *url = [NSURL URLWithString:urlString];
NSData *data = [NSData dataWithContentsOfURL:url];
NSError *error;
fullDictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// cell data - extracting the appropriate values by object rows
cell.textLabel.text = [[[fullDictionary allValues] valueForKeyPath:@"strTerm"] objectAtIndex:indexPath.row];
return cell;
}
答案 0 :(得分:1)
从您的代码判断,看起来您知道如何从字典中获取相应的数组,因为您显然正在使用数组来设置cell.textLabel
的当前值。因此对代码进行逆向工程,看起来像未排序的数组是由:
NSArray *originalArray = [[fullDictionary allValues] valueForKeyPath:@"strTerm"];
现在您只需要对该数组进行排序。如果它是一个简单的字符串数组,你可以做一些简单的事情:
NSArray *sortedArray = [originalArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
如果您正在处理更复杂的字典条目数组或类似的东西,那么排序方法的排列可以让您获得很好的控制。请参阅此处以获取更复杂的排序方法,作为对JSON结果进行排序的方法:Filtering UITableView from XML source。这是一个与你不同的问题,但也许它可以让你了解你可以用sortedArrayUsingComparator
做些什么。