RouteGuide example now works with moving between tabs. Fixes issue 6404.
diff --git a/examples/objective-c/route_guide/ViewControllers.m b/examples/objective-c/route_guide/ViewControllers.m
index 0b1a1cf..e329782 100644
--- a/examples/objective-c/route_guide/ViewControllers.m
+++ b/examples/objective-c/route_guide/ViewControllers.m
@@ -80,19 +80,14 @@
  * Run the getFeature demo. Calls getFeature with a point known to have a feature and a point known
  * not to have a feature.
  */
-@interface GetFeatureViewController : UIViewController
+@interface GetFeatureViewController : UIViewController {
+  RTGRouteGuide *service;
+}
 @end
 
 @implementation GetFeatureViewController
 
-- (void)viewDidLoad {
-  [super viewDidLoad];
-
-  // This only needs to be done once per host, before creating service objects for that host.
-  [GRPCCall useInsecureConnectionsForHost:kHostAddress];
-
-  RTGRouteGuide *service = [[RTGRouteGuide alloc] initWithHost:kHostAddress];
-
+- (void)execRequest {
   void (^handler)(RTGFeature *response, NSError *error) = ^(RTGFeature *response, NSError *error) {
     if (response.name.length) {
       NSLog(@"Found feature called %@ at %@.", response.name, response.location);
@@ -111,6 +106,19 @@
   [service getFeatureWithRequest:[RTGPoint message] handler:handler];
 }
 
+- (void)viewDidLoad {
+  [super viewDidLoad];
+
+  // This only needs to be done once per host, before creating service objects for that host.
+  [GRPCCall useInsecureConnectionsForHost:kHostAddress];
+
+  service = [[RTGRouteGuide alloc] initWithHost:kHostAddress];
+}
+
+- (void)viewDidAppear:(BOOL)animated {
+  [self execRequest];
+}
+
 @end
 
 
@@ -120,16 +128,15 @@
  * Run the listFeatures demo. Calls listFeatures with a rectangle containing all of the features in
  * the pre-generated database. Prints each response as it comes in.
  */
-@interface ListFeaturesViewController : UIViewController
+@interface ListFeaturesViewController : UIViewController {
+  RTGRouteGuide *service;
+}
+
 @end
 
 @implementation ListFeaturesViewController
 
-- (void)viewDidLoad {
-  [super viewDidLoad];
-
-  RTGRouteGuide *service = [[RTGRouteGuide alloc] initWithHost:kHostAddress];
-
+- (void)execRequest {
   RTGRectangle *rectangle = [RTGRectangle message];
   rectangle.lo.latitude = 405E6;
   rectangle.lo.longitude = -750E6;
@@ -147,6 +154,16 @@
   }];
 }
 
+- (void)viewDidLoad {
+  [super viewDidLoad];
+
+  service = [[RTGRouteGuide alloc] initWithHost:kHostAddress];
+}
+
+- (void)viewDidAppear:(BOOL)animated {
+  [self execRequest];
+}
+
 @end
 
 
@@ -157,14 +174,15 @@
  * database with a variable delay in between. Prints the statistics when they are sent from the
  * server.
  */
-@interface RecordRouteViewController : UIViewController
+@interface RecordRouteViewController : UIViewController {
+  RTGRouteGuide *service;
+}
+
 @end
 
 @implementation RecordRouteViewController
 
-- (void)viewDidLoad {
-  [super viewDidLoad];
-
+- (void)execRequest {
   NSString *dataBasePath = [NSBundle.mainBundle pathForResource:@"route_guide_db"
                                                          ofType:@"json"];
   NSData *dataBaseContent = [NSData dataWithContentsOfFile:dataBasePath];
@@ -178,8 +196,6 @@
     return location;
   }];
 
-  RTGRouteGuide *service = [[RTGRouteGuide alloc] initWithHost:kHostAddress];
-
   [service recordRouteWithRequestsWriter:locations
                                  handler:^(RTGRouteSummary *response, NSError *error) {
     if (response) {
@@ -193,6 +209,16 @@
   }];
 }
 
+- (void)viewDidLoad {
+  [super viewDidLoad];
+
+  service = [[RTGRouteGuide alloc] initWithHost:kHostAddress];
+}
+
+- (void)viewDidAppear:(BOOL)animated {
+  [self execRequest];
+}
+
 @end
 
 
@@ -202,14 +228,15 @@
  * Run the routeChat demo. Send some chat messages, and print any chat messages that are sent from
  * the server.
  */
-@interface RouteChatViewController : UIViewController
+@interface RouteChatViewController : UIViewController {
+  RTGRouteGuide *service;
+}
+
 @end
 
 @implementation RouteChatViewController
 
-- (void)viewDidLoad {
-  [super viewDidLoad];
-
+- (void)execRequest {
   NSArray *notes = @[[RTGRouteNote noteWithMessage:@"First message" latitude:0 longitude:0],
                      [RTGRouteNote noteWithMessage:@"Second message" latitude:0 longitude:1],
                      [RTGRouteNote noteWithMessage:@"Third message" latitude:1 longitude:0],
@@ -219,8 +246,6 @@
     return note;
   }];
 
-  RTGRouteGuide *service = [[RTGRouteGuide alloc] initWithHost:kHostAddress];
-
   [service routeChatWithRequestsWriter:notesWriter
                           eventHandler:^(BOOL done, RTGRouteNote *note, NSError *error) {
     if (note) {
@@ -234,4 +259,14 @@
   }];
 }
 
+- (void)viewDidLoad {
+  [super viewDidLoad];
+
+  service = [[RTGRouteGuide alloc] initWithHost:kHostAddress];
+}
+
+- (void)viewDidAppear:(BOOL)animated {
+  [self execRequest];
+}
+
 @end