iPhone: как перезагрузить tableView и отправить подробный вид из AppDelegate? - PullRequest
0 голосов
/ 25 февраля 2011

мое приложение основано на навигации.в котором у меня есть основной tableView, который показывает элементы канала в ячейках.при щелчке по ячейке создается подробный вид, который показывает детали этого элемента канала.сейчас я работаю с push-уведомлениями.при нажатии кнопки действия в уведомлении вызывается

(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo: 

.Как я могу реализовать этот метод, если нажата кнопка действия в уведомлении.он должен снова проанализировать канал, перезагрузить представление таблицы, создать подробный вид последних элементов канала и поместить его в стек навигации.Я попробовал некоторый код, но он не работал.Вот код, который я написал.

в AppDelegate:

 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
               RootViewController *controller = [[RootViewController alloc] init];
               [controller newFeedItem];
     }

в RootViewController:

    - (void)newFeedItem
    {
        spinner = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
spinner.frame=CGRectMake(130, 170, 50, 50);
[self.view addSubview:spinner];
[spinner startAnimating];

[self performSelector:@selector(doStuff) withObject:nil afterDelay:0.01];
  }

  -(void)doStuff
  {

   [[self stories] removeAllObjects];
   [self startParsing];
   [self.tableView reloadData];
// create detailview and push it in navigational stack
       [spinner stopAnimating];
   [spinner release];
 }

, но индикатор активности не появляется и tableView также не перезагружается.Почему так происходит?Спасибо заранее

1 Ответ

1 голос
/ 25 февраля 2011

Не совсем уверен в ходе вашей программы, но я предполагаю, что вы показываете rootViewController при запуске программы, а позже вы получите удаленное уведомление.

В вашем коде (в didReceiveRemoteNotification) вы создаете экземпляр нового rootViewController, и этот новый будет отличаться от того, который уже есть на экране. Следуя вашему подходу, вы можете захотеть выделить контроллер один раз и оставить его на потом, когда придет удаленное уведомление.

Лично я бы предложил использовать локальные уведомления и запустить локальное уведомление в didReceiveRemoteNotification и перехватить его в rootViewController. Это обеспечит ответ текущего активного экземпляра контроллера.

Также не уверен, почему прядильщик не показывает, для попытки позвоните из viewDidAppear, просто он видит, что он работает вообще, и если проблема в реакции на удаленное уведомление. И использовать несколько точек останова.


Отредактируйте с учетом вашего комментария:

в интерфейсе определения

RootViewController *controller

В реализации вы выделяете контроллер (например, appDidFininshLaunching)

 if (controller == nil) controller =  [[RootViewController alloc] init]

в didReceiveRemoteNotification затем вы можете сделать

           [controller newFeedItem];

без выделения его снова, и вы можете обратиться к тому же контроллеру. Не забудьте выпустить его в -(void)dealloc

...