PrepareForSegue未被调用/解雇

时间:2013-05-27 18:09:55

标签: ios objective-c xcode

C / xcode极客!

我一直在努力解决这个错误几个小时,我似乎没有找到解决方案,尽管看起来很多人都遇到了完全相同的问题。

参见代码:

//
//  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.
    // e.g. 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开发的事情。如果解决方案很简单,那么我就无处可去:o)。

提前致谢!

1 个答案:

答案 0 :(得分:1)

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

我在going about sharing information in ios between views中遇到了类似的问题,答案可能会有所帮助。

特别是从那篇文章的答案中他说:

“在你的.m文件中,你会触发你的行为 - 可能是按钮或某个动作。听起来你已经有了这个:”

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

-

当然换掉你的segue名字。