2013-03-09 3 views
0

Я немного новичок в разработке iOS. У меня эти методы объявлены и реализованы в двух отдельных контроллерах представлений (контроллере главного представления и контроллере представления редактора) и необходимо передать данные из редактора в мастер. Мастер содержит табличное представление, которое необходимо обновить с соответствующим именем. (Примечание: Я использовал шаблон Master-Detail приложений по умолчанию для iPhone я не вручную создать это с одноместным-View Application.)UITableView не обновляется после отклонения редактора редактора

В настоящее время UITableView внутри MasterViewController не обновляется с новой ячейки , Для меня была такая неспокойная неделя, я просто должен что-то упустить. Вот код для Master View Controller:

@implementation FTMasterViewController 
@synthesize bPlusMinusField, cPlusMinusField, cTerm, bTerm; 

-(void) passTrinomial:(CCTrinomial *)tri withBPlusMinusField:(NSString *)bField withBTerm:(double)bTermField withCPlusMinusField:(NSString *)cField withCTerm:(double)cTermField { 



    //allocate the array 
    if (!self.trinomials) { 
    self.trinomials = [[NSMutableArray alloc] init]; 
    } 
    //set Master VC properties to tri fields passed in 
    self.bPlusMinusField = bField; 
    self.cPlusMinusField = cField; 
    self.bTerm = bTermField; 
    self.cTerm = cTermField; 
    NSString *trinomial = [NSString stringWithFormat:@"x² %@ %g %@ %g", bPlusMinusField, bTerm, cPlusMinusField, cTerm]; 

    [self.trinomials insertObject:trinomial atIndex:0]; 

    NSLog(@"%lu", (unsigned long)[self.trinomials count]); 

} 

#pragma mark - Table View 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [self.trinomials count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 

    cell.textLabel.text = [NSString stringWithFormat:@"x² %@ %g %@ %g", bPlusMinusField, bTerm, cPlusMinusField, cTerm]; 
    return cell; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"showDetail"]) { 
     NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
     NSDate *object = _objects[indexPath.row]; 
     [[segue destinationViewController] setDetailItem:object]; 
    } 
} 



@end 

Это код, который я счел необходимым, чтобы увидеть, чтобы решить эту проблему: очевидно, у меня по умолчанию переопределены методы в остальной части реализации в.

Это код контроллера редактора. Когда мысль появляется для вас, да, кнопка «done» связана с методом -handleDoneButtonPushed: в моей основной раскадровке.

-(IBAction)handleDoneButtonPushed:(id)sender { 
    [self dismissViewControllerAnimated:YES completion:NULL]; 
    FTMasterViewController *masterVC = [[FTMasterViewController alloc] init]; 
    [masterVC passTrinomial:factoring withBPlusMinusField:bPlusMinusField.text withBTerm:[bTriField.text doubleValue] withCPlusMinusField:cPlusMinusField.text withCTerm:[cTriField.text doubleValue]]; 


} 

Этот редактор-контроллер просто получает несколько значений в виде UITextField и вручает их к главному View Controller через объект этого класса. Опять же, когда я нажимаю кнопку «Готово» на моем верхнем навигационном баре, он отклоняет редактор View View, но не обновляет представление таблицы с полученными значениями.

Справка была бы принята с благодарностью. :)

ответ

0
-(IBAction)handleDoneButtonPushed:(id)sender 
{ 
    [self dismissViewControllerAnimated:YES completion:NULL]; 
    FTMasterViewController *masterVC = [[FTMasterViewController alloc] init]; 
    [masterVC passTrinomial:factoring 
     withBPlusMinusField:bPlusMinusField.text 
        withBTerm:[bTriField.text doubleValue] 
     withCPlusMinusField:cPlusMinusField.text 
        withCTerm:[cTriField.text doubleValue]]; 

} 

Это неправильно, вы уже экземпляр MasterViewController вы не должны создать экземпляр новый, передавать данные и ожидать, что предыдущая, чтобы обновить подробное значение.

Следует использовать шаблон делегирования.

Создать протокол в FTEditorController. Подробное сообщение о реализации Delegates in Objective-C

@protocol FTEditorControllerDelegate <NSObject> 

@optional 
- (void)editorController:(FTEditorViewController *)editorController didCompleteEditingTrinomial:(NSString *)trinomial; 

@end 

При установке MasterController в качестве делегата EditorController после того, как событие, представляющее интерес возникает в EditorController, это дает, что событие в его делегатом.

Итак, как только вы закончите создание трехмерного выражения, передайте его MasterController.

-(IBAction)handleDoneButtonPushed:(id)sender 
    { 
     [self dismissViewControllerAnimated:YES completion:NULL]; 
     NSString *trinomial = [NSString stringWithFormat:@"x² %@ %g %@ %g", bPlusMinusField.text, [bTriField.text doubleValue], cPlusMinusField.text, [cTriField.text doubleValue]]; 
     if([self.delegate respondsToSelector:@selector(editorController:didCompleteEditingTrinomial:)]) 
     { 
      [self.delegate editorController:self didCompleteEditingTrinomial:trinomial]; 
     } 

    } 


//FTEditorControllerDelegate implementation in MasterViewController 
- (void)editorController:(FTEditorViewController *)editorController didCompleteEditingTrinomial:(NSString *)trinomial{ 

    //allocate the array 
    if (!self.trinomials) { 
    self.trinomials = [[NSMutableArray alloc] init]; 
    } 

    //This condition is tricky, I assume you always want to display the edited 
    //trinomial expression as the first one in tableView 
    [self.trinomials insertObject:trinomial atIndex:0]; 

    //Reloads the tableView to reflect the changes 
    [self.tableView reloadData]; 

} 
+0

A-hah! Я знал, что чего-то не хватает. Раньше я использовал шаблон делегирования, но я неправильно думал о том, как я использовал этот метод. Позвольте мне попробовать и посмотреть, как это работает. –

+0

@ HunterE. Рад помочь вам. Вставка триномии - это то, над чем вам нужно работать. – Anupdas

+0

Ну, под -handleDoneButtonPushed: метод, я сделал это: [self.delegate editorController: self didCompleteEditingTrinomial: trinomialString], а затем принял протокол и реализовал метод в FTMasterViewController. Я просто вставил код прямо в реализацию, но представление таблицы все еще не обновляется. Я пересмотрел таблицу-tableView: cellForRowAtIndexPath: для обработки массива, но все же этого не делает. Мысли? –

Смежные вопросы