2012-04-06 11 views
1

Ich vermisse etwas Grundlegendes hier.Übergabe Wörterbuch zwischen View-Controller

Ich habe eine Tabellenansicht mit jeder Zelle, die den Inhalt eines NSDictionary anzeigt. Wenn ich auf jede Zelle klicke, möchte ich zu einem neuen View-Controller wechseln, der Details aus demselben Wörterbuch anzeigt.

Aber jedes Mal, wenn ich versuche, das Wörterbuch zu übergeben, ist der Inhalt null auf der anderen Seite.

Hier ist meine für segue im View-Controller Vorbereitung der Tabellen-Ansicht enthält:

-(void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"tableSegue"]){ 

     MODetailViewController *detailViewController = [[MODetailViewController alloc] init]; 

     NSIndexPath *selectedIndexPath = [self.monetiseTable indexPathForSelectedRow]; 
     int selectedIndexPathAsInteger = selectedIndexPath.row; 

     NSDictionary *dictionaryToPass = [[NSDictionary alloc] initWithDictionary:[self.feedArray objectAtIndex:selectedIndexPathAsInteger]]; 

     NSLog(@"%@", dictionaryToPass); 

     detailViewController.passedDictionary = dictionaryToPass; 
    } 
} 

Das NSLog das Wörterbuch zeigt, wie erwartet.

nun im Detail View-Controller-Header ich die Eigenschaft deklariert (i ARC bin mit):

@property (weak, nonatomic) NSDictionary *passedDictionary; 

Jetzt in viewWillAppear:

-(void)viewWillAppear:(BOOL)animated{ 

[super viewWillAppear:YES]; 

NSLog(@"%@", self.passedDictionary); 
} 

Die NSLog null zurückkehrt !?

Ich habe es synthetisiert.

Ich vermisse etwas Grundlegendes bin ich sicher. Irgendeine Hilfe?

Antwort

2
@property (weak, nonatomic) NSDictionary *passedDictionary; 

statt weak, erklären sie strong.

Dadurch wird verhindert, dass das Wörterbuch freigegeben wird.

Viel Glück!

+0

danke. Es ist an der Zeit, dass ich wirklich lesen, behalten, kopieren, zuweisen, schwach, stark usw.! –

+0

Wenn passedDictionary als stark deklariert ist, wird der Detailansichtcontroller manchmal nicht freigegeben. – iKT

2

Ordnen Sie keinen neuen MODetailViewController zu. Verwenden Sie dasjenige, das Ihnen als Zielcontroller im Parameter "segue" übergeben wurde.

+0

War nicht ganz die richtige Antwort, aber +1 für die Pass-Sache –

Verwandte Themen