1
我有下面的代码里面:UINavigationController的块
[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];
}];
我想从一个不同的viewController执行此块。唯一不工作的是pushViewController。当我执行推送时,不会调用AlbumDetailViewController。我想知道我遇到的问题是否与执行块时不再存在的self.navigationController有关。我曾假设该块将使用运行时存在的任何当前视图控制器导航控制器。这似乎并非如此。那么,有没有人有一些关于如何设置块来在运行时调用detailViewController的指针。
这也取决于你如何调用这个块。如果您将它传递给GCD以在后台队列上运行,则会出现问题,因为您只应从主线程调用UIKit方法。 – Abizern 2012-03-28 00:15:11