NSMutableDictionaryに取り込まれたJSONデータによって入力されたカスタムUITableViewがあります。次に、distanceFromLocationメソッドの値をディクショナリに追加できるように、可変コピーを作成します。私がやろうとしているのは、その新しいオブジェクトを使用して、セルを最も近い距離で並べ替えることです。NSSortDescriptorを使用する他の例を見てきましたが、それは配列のソートについて話しています。辞書からセルを並べ替えるか、辞書から配列を作成してNSSortDescriptorを使用するにはどうすればよいですか?
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"dealerlistcell";
DealerListCell *cell = (DealerListCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[DealerListCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
//gets JSON data and loads into Dictionary
NSMutableDictionary *info = [json objectAtIndex:indexPath.row];
NSMutableDictionary *infocopy = [info mutableCopy];
//pulls the current user location
CLLocation *currentlocation2 = [[CLLocation alloc] initWithLatitude:locationManager.location.coordinate.latitude longitude:locationManager.location.coordinate.longitude];
//gets the latitude and longitude from info dictionary to calculate distancefromlocation for each cell
CLLocation *locationforindex = [[CLLocation alloc] initWithLatitude:[[info objectForKey:@"dlrlat"]doubleValue] longitude:[[info objectForKey:@"dlrlong"]doubleValue]];
//calculates the distance
CLLocationDistance dist = ([locationforindex distanceFromLocation:currentlocation2]*0.0006213711922);
//format the distance to a string for the label
NSString *distancestring = [NSString stringWithFormat:@"%.1f miles",dist];
//create object with distance to add to dictionary
NSNumber *distance = [NSNumber numberWithDouble:dist];
編集:後でNSSortDescriptorで呼び出すオブジェクトに割り当てられた距離
//add to dictionary
[infocopy setObject:distance forKey:@"distance"];
//create array from dictionary
NSDictionary *aDict = [NSDictionary dictionaryWithDictionary:infocopy];
NSArray *anArray = [aDict allValues];
//implemented NSSortDescriptor
NSSortDescriptor *sorter [[NSSortDescriptor alloc] initWithKey:@"distance" ascending: YES];
NSArray *sortdescriptors = [NSArray arrayWithObject:sorter];
[anArray sortedArrayUsingDescriptors:sortdescriptors];
ただし、キー距離に対してvalueForUndefinedKeyをスローします。「initWithKey」で距離キーを定義するにはどうすればよいですか?