Я наткнулся на кое-что, что в конце концов понял, но думаю, что, возможно, есть гораздо более эффективный способ сделать это.
У меня был объект (NSObject, который принял протокол MKAnnotation ), который имел ряд свойств (заголовок, подзаголовок, широта, долгота, информация и т. д. ). Мне нужно было передать этот объект другому объекту, который хотел извлечь из него информацию с помощью методов 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 вместо объекта для получения ключа информация.