2014-09-30 2 views
0

У меня есть расширение виджета сегодня, и когда я нажимаю кнопку, открывается приложение. В первый раз, когда я нажимаю кнопку и выполняю код, она использует настраиваемую схему URL для передачи данных. Это анализируется в AppDelegate, и он определяет, какие данные заполняют ViewController. Код ViewController создан с идентификатором раскадровки. Значения применяются к одному из свойств ViewController, а затем в viewDidLoad остальные значения заполняются на основании этого, переданного в Value. Все это работает в первый раз.Открытие приложения из расширения, свойства меняются только в первый раз

Однако, если я нажал кнопку «домой», откройте центр уведомлений, коснитесь кнопки в своем приложении и повторите весь процесс во второй раз. Я просматриваю код как обычно, все значения устанавливаются, но когда отображается ViewController, значения (например, UILabel) являются такими же, как в первый раз, но они должны были измениться.

NSString *url = [NSString stringWithFormat:string ://%@", self.expanededTubeLine.lineName ]; 

NSExtensionContext *myExtension=[self extensionContext]; 
[myExtension openURL:[NSURL URLWithString:url] completionHandler:nil]; 

//

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 

NSString *tubeLineName = [url host]; 

NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.koc.extensiontest"]; 

if ([defaults objectForKey:@"weekendData"]) { 

    NSData *tubeData = [[defaults objectForKey:@"weekendData"] copy]; 

    TFLParser *parser = [[TFLParser alloc] initWithData:tubeData]; 
    [parser parseData]; 
    for (int x = 0; x < parser.delayedTubeLines.count; x++) { 

     TubeLine *tl = [[TubeLine alloc] init]; 
     tl = [parser.delayedTubeLines objectAtIndex:x]; 
     if ([tl.lineName isEqualToString:tubeLineName]) { 

      UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
      TubeLineViewController *tubeLineViewController = [storyboard instantiateViewControllerWithIdentifier:@"TubeLineViewController"]; 
      tubeLineViewController.tubeLine = tl; 


      [self.window.rootViewController presentViewController:tubeLineViewController animated:YES completion:nil]; 
      return YES; 
     } 
    } 
} 

}

//

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.tubeLineName.text = self.tubeLine.lineName; 
    self.tubeLineName.font = [UIFont openSansLightFontOfSize:18.0f]; 
    self.tubeLineName.textColor = [UIColor whiteColor]; 
    self.tubeLineName.backgroundColor = self.tubeLine.lineBackgroundUIColor; 
    self.tubeLineName.layer.cornerRadius = 5; 
    self.tubeLineName.clipsToBounds = YES; 

    self.tubeLineMessage.font = [UIFont openSansLightFontOfSize:18.0f]; 
    self.tubeLineMessage.text = self.tubeLine.lineMessage; 
    self.tubeLineMessage.textColor = [UIColor darkGrayColor]; 
} 

ответ

3

Это звучит как View загружается уже так совать все контроллеры просмотра перед отправкой на контроллер на основе виджета в handleOpenURL: функция.

[self.viewController.navController popToRootViewControllerAnimated:NO]; 
    if ([self.viewController presentedViewController]) { 
     [self.viewController dismissViewControllerAnimated:NO completion:nil]; 
    }