将用户位置传递给MKMapItem

我已经显示了用户的位置,我想在MKMApItem显示这些提取的位置。 我知道在MKMapItem显示的方式..但我不能将这些提取的位置传递给MapItem类..可以帮我传递这些值

 FBRequest *friendRequest = [FBRequest requestForGraphPath:@"me/friends?field=name,location,hometown"]; [ friendRequest startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error){ NSArray *data = [result objectForKey:@"data"]; for (FBGraphObject<FBGraphUser> *friend in data) { NSLog(@"%@:%@", [friend name ],[friend.location objectForKey:@"name"]); 

和我的输出是:

 2013-01-09 17:47:57.096 istb[296:1a03] Athish:Cochin, Kerala 2013-01-09 17:47:57.096 istb[296:1a03] Anges:Mumbai . . . . 2013-01-09 17:47:57.097 istb[296:1a03] Raja:Delhi 2013-01-09 17:47:57.097 istb[296:1a03] Rajesh:Canada 

我应该如何将这些位置传递给MKMapItem

 - (IBAction)onClick:(id)sender { Class mapItemClass=[MKMapItem class]; if(mapItemClass &&[mapItemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)]) {...}} 

提前致谢..

我回答了如何针对您的其他问题做出多个地址parsing请求的问题 ,所以我不会在这里重复这个叙述。

底线,我只是build议你尝试:

 FBRequest *friendRequest = [FBRequest requestForGraphPath:@"me/friends?field=name,location,hometown"]; [friendRequest startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) { NSArray *friends = [result objectForKey:@"data"]; [self geocodeFriendRequestResponse:friends]; }]; 

然后你可以调整在Map上的多个位置提供的答案(使用MKMapItem和CLGeocoder) :

 - (void)geocodeFriendRequestResponse:(NSArray *)friends { CLGeocoder *geocoder = [[CLGeocoder alloc]init]; NSMutableArray *mapItems = [NSMutableArray array]; NSOperationQueue *queue = [[NSOperationQueue alloc] init]; NSOperation *finalCompletionOperation = [NSBlockOperation blockOperationWithBlock:^{ [MKMapItem openMapsWithItems:mapItems launchOptions:nil]; }]; NSOperation *previousCompletionHandler = nil; for (FBGraphObject<FBGraphUser> *friend in friends) { NSString *address = [friend.location objectForKey:@"name"]; // create a block for the geocode request itself NSBlockOperation *geocodeRequest = [[NSBlockOperation alloc] init]; // make this geo request dependent upon the completion of the prior geocode request completion block if (previousCompletionHandler) [geocodeRequest addDependency:previousCompletionHandler]; // create a block for the geocode request completion block NSBlockOperation *geocodeCompletionHandler = [[NSBlockOperation alloc] init]; // The final `openMapsWithItems` is contingent on the completion of this geocode request completion block [finalCompletionOperation addDependency:geocodeCompletionHandler]; // let's initiate the geocode request [geocodeRequest addExecutionBlock:^{ [geocoder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) { // upon completion, we'll initiate the geocode request completion block [geocodeCompletionHandler addExecutionBlock:^{ if (error) NSLog(@"%@", error); else if ([placemarks count] > 0) { CLPlacemark *geocodedPlacemark = [placemarks objectAtIndex:0]; MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:geocodedPlacemark.location.coordinate addressDictionary:geocodedPlacemark.addressDictionary]; MKMapItem *mapItem = [[MKMapItem alloc] initWithPlacemark:placemark]; [mapItem setName:geocodedPlacemark.name]; [mapItems addObject:mapItem]; } }]; [queue addOperation:geocodeCompletionHandler]; }]; }]; [queue addOperation:geocodeRequest]; previousCompletionHandler = geocodeCompletionHandler; } [queue addOperation:finalCompletionOperation]; } 

此例程是确保多个地址parsing请求不会同时发生的复杂方式。 背后的逻辑更详细地解释了Map上的多个位置(使用MKMapItem和CLGeocoder) 。