私は最終的に理解した何かに出くわしましたが、おそらくそれを達成するためのはるかに効率的な方法があると思います.
いくつかのプロパティ (タイトル、サブタイトル、緯度、経度、情報など) を持つオブジェクト (MKAnnotation プロトコルを採用した NSObject) がありました。このオブジェクトを、objectForKey メソッドを使用して情報を抽出する別のオブジェクトに、NSDictionary として渡すことができるようにする必要がありました (これは、別のビュー コントローラーから取得していたためです)。
私がやったことは、新しい NSMutableDictionary を作成し、 setObject: forKey を使用して重要な情報の各部分を転送することでした。次に、新しく作成した辞書を渡しました。
これを行う簡単な方法はありましたか?
関連するコードは次のとおりです。
// sender contains a custom map annotation that has extra properties...
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"showDetailFromMap"])
{
DetailViewController *dest =[segue destinationViewController];
//make a dictionary from annotaion to pass info
NSMutableDictionary *myValues =[[NSMutableDictionary alloc] init];
//fill with the relevant info
[myValues setObject:[sender title] forKey:@"title"] ;
[myValues setObject:[sender subtitle] forKey:@"subtitle"];
[myValues setObject:[sender info] forKey:@"info"];
[myValues setObject:[sender pic] forKey:@"pic"];
[myValues setObject:[sender latitude] forKey:@"latitude"];
[myValues setObject:[sender longitude] forKey:@"longitude"];
//pass values
dest.curLoc = myValues;
}
}
あなたの集合的な知恵に前もって感謝します。
以下は、人々のおかげで私が思いついたものです...
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"showDetailFromMap"])
{
DetailViewController *dest =[segue destinationViewController];
NSArray *myKeys = [NSArray arrayWithObjects:
@"title",@"subtitle",@"info",@"pic",@"latitude",@"longitude", nil];
//make a dictionary from annotaion to pass info
NSDictionary *myValues =[sender dictionaryWithValuesForKeys:myKeys];
//pass values
dest.curLoc = myValues;
}
}
そして、以下に示すように、さらに簡単な修正...
オブジェクトのキーの代わりに valueForKey を使用して情報を取得します。