0

У меня есть навигационная система, которая загружает табличный вид. Когда вы нажимаете на ячейку, она копирует некоторые данные в файл detailsVC, есть кнопка обновления для обновления значений. Как обновить данные в деталях VC, не возвращаясь назад к представлению таблицы и обновляя их в первую очередь?Как обновить данные ViewController1 с данными, полученными из ViewController2

Это то, что я хочу сделать:

TableView> DetailsView> EditDetails> Вернуться к DetailsView с обновленной информацией

Не так:

TableView> DetailsView> EditDetails > DetailsView (с помощью навигации назад)> TableView> (pull to refresh)> DetailsView

EDIT

- (void) receiveNotifications:(NSNotification *) notification { 
    if ([[notification name] isEqualToString:@"updateDetailsVC"]){ 
     dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
     dispatch_async(queue, ^{ 
      NSDictionary *userInfo = [notification userInfo]; 
      NSLog (@"%@", userInfo); 

      PRIORITYstring = [userInfo objectForKey:@"PRIORITY"]; 
     }); 
    } 
} 

я был в состоянии получить код для работы и через NSLog, мои данные оттеснили в качестве словаря.

когда viewDidLoad для деталей VC, он запускает метод, который помещает NSString в соответствующую UILabel.

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self displayData]; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(receiveNotifications:) 
              name:@"updateDetailsVC" 
              object:nil]; 
} 



-(void)displayData { 
     PRIORITYlabel.text = [NSString stringWithFormat:@"Short Description: \n%@", QDESCRIPTIONstring]; 
} 


- (void) receiveNotifications:(NSNotification *) notification { 
    if ([[notification name] isEqualToString:@"updateDetailsVC"]){ 
     dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
     dispatch_async(queue, ^{ 
      NSDictionary *userInfo = [notification userInfo]; 
      NSLog (@"%@", userInfo); 

      PRIORITYstring = [userInfo objectForKey:@"PRIORITY"]; 
      //PRIORITYlabel.text = [userInfo objectForKey:@"PRIORITY"]; 
     }); 
    } 
} 

Как я могу получить словарь, чтобы переопределить исходные данные?

+0

Вы можете использовать блок для этого – NiravPatel

ответ

0

Вы можете использовать NSNotificationCenter. Отправлять уведомление из вида редактирования и подписываться на одно и то же уведомление из представления таблицы и подробного представления. Уведомление

Проводка ::

[[NSNotificationCenter defaultCenter] 
     postNotificationName:@"TestNotification" 
     object:nil userInfo: userInfo]; 

Если вы хотите передать какие-либо данные с точки зрения редактирования, вы можете использовать userInfo словаря !!

Подписавшись на уведомление от просмотра таблицы и подробного вида ::

[[NSNotificationCenter defaultCenter] addObserver:self 
     selector:@selector(receiveTestNotification:) 
     name:@"TestNotification" 
     object:nil]; 

метод Действия ::

- (void) receiveTestNotification:(NSNotification *) notification 
{ 
    // [notification name] should always be @"TestNotification" 
    // unless you use this method for observation of other notifications 
    // as well. 

    if ([[notification name] isEqualToString:@"TestNotification"]) 
     NSLog (@"Successfully received the test notification!"); 
     //retrieve the userInfo dictionary received from edit view 
     NSDictionary *userInfo = [notification userInfo]; 
} 

Вы можете добавить этот метод действия как в виде таблицы и детали Посмотреть.

Удаление наблюдателя в табличном и детального виде ::

- (void) dealloc 
{ 
    // If you don't remove yourself as an observer, the Notification Center 
    // will continue to try and send notification objects to the deallocated 
    // object. 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
} 

EDIT ::

Вы можете обновить свой метод displayData передать текст метки в качестве аргумента.

-(void)displayData: (NSString*) labelText{ 
     PRIORITYlabel.text = labelText; 
} 

Вы можете назвать то же самое из видаDidLoad и receiveNotifications: method.

От viewDidLoad ::

[self displayData: [NSString stringWithFormat:@"Short Description: \n%@", QDESCRIPTIONstring]]; 

От receiveNotifications ::

[self displayData: [NSString stringWithFormat:@"Short Description: \n%@", [[notification userInfo] objectForKey:@"PRIORITY"]]]; 
+0

спасибо за код, плохо проверить это завтра. я был привлечен к работе над некоторыми другими вещами, поэтому я не смог проверить это. – lizzy91

+0

, поэтому я могу получить данные, переданные через NSDictionary. теперь моя проблема - получить этот словарь для замены UILabel (или NSString, привязанных к нему) новыми данными. Я обновил свой пост, чтобы отразить – lizzy91

+0

, заработал он, как и предполагалось, спасибо за вашу помощь. – lizzy91