PrepareForSeque不被调用/解雇

C / Xcode的极客!

我一直在为这个错误奋斗了好几个小时,而且我似乎没有find解决办法,尽pipe看起来很多人有完全相同的问题。

见代码:

// // ListViewController.m // Puns // // Created by Amit Bijlani on 12/13/11. // Copyright (c) 2011 Treehouse Island Inc. All rights reserved. // #import "ListViewController.h" #import "BlogPost.h" //#import "Pun.h" #import "PunsTableViewCell.h" #import "DetailViewController.h" @implementation ListViewController - (id)initWithStyle:(UITableViewStyle)style { self = [super initWithStyle:style]; if (self) { // Custom initialization } return self; } #pragma mark - Segue - (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { NSLog(@"0"); if ( [[segue identifier] isEqualToString:@"ShowMenu"] ){ NSLog(@"1"); DetailViewController *dvc = (DetailViewController *)[segue destinationViewController]; dvc.menu = [self.blogPosts objectAtIndex:[[self.tableView indexPathForSelectedRow] row]]; } } #pragma mark - View lifecycle - (void)viewDidLoad { [super viewDidLoad]; // GET WEB DATA SOURCE (JSON) // The url NSURL *blogURL = [NSURL URLWithString:@"http://constantsolutions.dk/json.html"]; // The data NSData *jsonData = [NSData dataWithContentsOfURL:blogURL]; // Error variable NSError *error = nil; // jsonData to serialization NSDictionary *dataDictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error]; // Get array 'posts' self.blogPosts = [NSMutableArray array]; NSArray *blogPostsArray = [dataDictionary objectForKey:@"posts"]; for (NSDictionary *bpDictionary in blogPostsArray) { // Get title // Will only retrieve data, if TITLE exists BlogPost *blogPost = [BlogPost blogPostWithTitle:[bpDictionary objectForKey:@"title"]]; // Get the content blogPost.content = [bpDictionary objectForKey:@"content"]; // Get thumbnail blogPost.thumbnail = [bpDictionary objectForKey:@"thumbnail"]; // Get date blogPost.date = [bpDictionary objectForKey:@"date"]; // Get price blogPost.price = [bpDictionary objectForKey:@"price"]; // Add the object to blogPosts array [self.blogPosts addObject:blogPost]; } } - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. // eg self.myOutlet = nil; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return (interfaceOrientation == UIInterfaceOrientationPortrait); } #pragma mark - Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { // Return the number of sections. return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // Return the number of rows in the section. return [self.blogPosts count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"PunTableViewCell"; PunsTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[PunsTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } BlogPost *blogPost = [self.blogPosts objectAtIndex:indexPath.row]; cell.menuTitle.text = blogPost.title; cell.menuContent.text = blogPost.content; if([blogPost.price length] == 0) { [cell.menuPrice setHidden:YES]; } else { cell.menuPrice.text = blogPost.price; } return cell; } @end 

正如你所看到的,我已经在prepareForSegue内部实现了NSLog(),但是它没有被触发。

你们有什么想法我做错了吗? 我对此很新,所以我还没有发现这整个iPhone的发展。 所以,如果解决scheme很简单,那么裸露在我身上:o)。

提前致谢!

你有一个segue的名字,那么这是否意味着你通过从一个button或表格视图单元拖动到另一个视图控制器来创build它,然后选中它并在xcode中命名它? 如果以编程方式更改视图,则不会调用该视图,但可以在交换视图之前手动调用方法进行准备

我有一个类似的问题,在共享信息的ios之间的答案可能会有所帮助。

特别是从那个post的回答他说:

“在你的.m文件中,你会触发你继续 – 也许在一个button或一些行动,听起来像你已经有这样的:”

 [self performSegueWithIdentifier:@"viewB" sender:self]; 

当然,换个名字吧。