ich den folgenden Code haben:UINavigationController innerhalb eines Blocks
[albumButton setAccessoryButtonPressed:^()
{
[[SoundEffectManager sharedSoundEffectManager] playSoundEffectForKey:kSoundEffectButtonPress];
AlbumDetailViewController* detailVC = [[[AlbumDetailViewController alloc] initWithNibName:@"AlbumDetailViewController" bundle:nil] autorelease];
[detailVC setPrice:[albumPrice stringValue]];
[detailVC setCoverImage:albumCover];
[detailVC setName:albumName];
[detailVC setDescription:albumDesc];
[detailVC setProductID:[NSString stringWithFormat:@"com.tunehopper.%@", albumID]];
[detailVC setComposer:composer];
[detailVC setMaxScore:maxScore];
for (NSString* key in songKeys)
{
NSDictionary* songDict = [albumSongs objectForKey:key];
NSString* songTitle = [songDict objectForKey:@"title"];
[[detailVC dataSource] addObject:songTitle];
}
//UINavigationController *nav = [[self.navigationController parentViewController] navigationController];
[self.navigationController pushViewController:detailVC animated:YES];
}];
Ich möchte diesen Block aus einem anderen Viewcontroller auszuführen. Das einzige, was nicht funktioniert, ist der PushViewController. Wenn ich den Push ausführe, wird der AlbumDetailViewController nicht aufgerufen. Ich frage mich, ob das Problem, das ich habe, damit zu tun hat, dass der self.navigationController nicht mehr existiert, wenn der Block ausgeführt wird. Ich hatte angenommen, dass der Block verwenden würde, was zur Zeit der aktuelle View Controller Controller zur Laufzeit existierte. Dies scheint nicht der Fall zu sein. Also, hat jemand einige Hinweise, wie ich den Block einrichten kann, um den detailViewController zur Laufzeit tatsächlich aufzurufen.
Es hängt auch davon ab, wie Sie diesen Block aufrufen. Wenn Sie es an GCD übergeben, um es in einer Hintergrundwarteschlange auszuführen, wird es Probleme geben, da Sie nur UIKit-Methoden vom Hauptthread aufrufen sollen. – Abizern