Obj-C méthode facile à convertir de NSObject avec des propriétés à NSDictionary?

J'ai couru à travers quelque chose que j'ai finalement compris, mais pense qu'il y a probablement une façon beaucoup plus efficace pour y parvenir.

J'ai eu un objet (un NSObject, qui a adopté la MKAnnotation protocole) qui a eu un certain nombre de propriétés (titre, sous-titre,la latitude,la longitude, info, etc.). J'avais besoin d'être en mesure de passer à cet objet à un autre objet, qui voulaient extraire des informations à partir de l'aide de objectForKey méthodes, comme un NSDictionary (parce que c'est ce qu'il se faisait à partir d'un autre point de vue contrôleur).

Ce que j'ai fait était de créer un nouveau NSMutableDictionary et l'utilisation setObject: forKey sur elle pour transférer chaque pièce essentielle de l'info, et puis je viens de passer sur le nouveau dictionnaire.

Y avait-il un plus facile façon de le faire?

Voici le code correspondant:

//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;
    }
}

Merci d'avance pour votre sagesse collective.


Voici ce que j'ai trouvé, merci à vous les gens, ci-dessous...

- (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;
}

}

Et un encore plus simple correctif, comme on le voit ci-dessous...

À l'aide de valueForKey à la place de l'objet de la clé pour récupérer les informations.


source d'informationauteur james Burns | 2012-04-25