我遇到了一些我最终想通的东西,但认为可能有一种更有效的方法来完成它。
我有一个对象(一个采用 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 而不是对象作为键来检索信息。