2013-08-28 7 views
0

Мне нужно просмотреть контроллеры (UpcomingReleaseViewController и ReleaseController).prepareForSegue выводит меня на пустую страницу

Я использую JSON для заполнения моего приложения.

Основная страница моего приложения - это UpcomingReleasesViewController, как только вы нажмете на ячейку, на которой предполагается перейти на страницу Release, и покажите вам больше информации, но по какой-либо причине каждый раз, когда вы нажимаете на ячейку, вы попадаете в пустая страница.

ReleaseView.h

@interface ReleaseViewController : UIViewController 
@property (weak, nonatomic) IBOutlet UITextView *releaseView; 
@property (strong, nonatomic) NSString *release_name; 
@end 

ReleaseView.m

@interface ReleaseViewController() 

@end 

@implementation ReleaseViewController 

@synthesize releaseView = _releaseView; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.releaseView.text = self.release_name; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 

UpcomingReleaseViewController.m

#import "UpcomingReleasesViewController.h" 
#import "UpcomingRelease.h" 
#import "ReleaseViewController.h" 

@interface UpcomingReleasesViewController() 

@end 

@implementation UpcomingReleasesViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSURL *upcomingReleasesURL = [NSURL URLWithString:@"http://obscure-lake-7450.herokuapp.com/upcoming.json"]; 

    NSData *jsonData = [NSData dataWithContentsOfURL:upcomingReleasesURL]; 

    NSError *error = nil; 

    NSDictionary *dataDictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error]; 

    self.upcomingReleases = [NSMutableArray array]; 

    NSArray *upcomingReleasesArray = [dataDictionary objectForKey:@"upcoming_releases"]; 

    for (NSDictionary *upcomingReleaseDictionary in upcomingReleasesArray) { 
     UpcomingRelease *upcomingRelease = [UpcomingRelease upcomingReleaseWithReleaseName:[upcomingReleaseDictionary objectForKey:@"release_name"]]; 
     upcomingRelease.release_price = [upcomingReleaseDictionary objectForKey:@"release_price"]; 
     upcomingRelease.release_date = [upcomingReleaseDictionary objectForKey:@"release_date"]; 
     upcomingRelease.thumbnail = [upcomingReleaseDictionary objectForKey:@"thumbnail"]; 
     upcomingRelease.url = [NSURL URLWithString:[upcomingReleaseDictionary objectForKey:@"url"]]; 
     [self.upcomingReleases addObject:upcomingRelease]; 
    } 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    UpcomingRelease *upcomingRelease = [self.upcomingReleases objectAtIndex:indexPath.row]; 

    NSData *imageData = [NSData dataWithContentsOfURL:upcomingRelease.thumbnailURL]; 
    UIImage *image = [UIImage imageWithData:imageData]; 

    cell.imageView.image = image; 
    cell.textLabel.text = upcomingRelease.release_name; 
    cell.detailTextLabel.text = [NSString stringWithFormat:@"%@ — $%@",[upcomingRelease formattedDate], upcomingRelease.release_price]; 

    return cell; 
} 

#pragma mark - View Upcoming Release 

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"showRelease"]) { 
     ReleaseViewController *rvc = (ReleaseViewController *)[segue destinationViewController]; 
     rvc.release_name = [self.upcomingReleasesArray objectAtIndex:[[self.tableView indexPathForSelectedRow] row]]; 
    } 
} 


@end 

The Storyboard Segue назван правильно (showRelease), и я связал UITextView с моим ReleaseViewController (releaseView). Возможно, что-то связано с предстоящим ReleasesArray? Я новичок в iOS, я не знаю, в чем проблема.

+0

Где вы называете segue? В 'didSelectRowAtIndexPath'? – CaptJak

+1

Журнал [self.upcomingReleasesArray objectAtIndex: [[self.tableView indexPathForSelectedRow] row] в файле prepareForSegue, чтобы узнать, нет ли там ничего. – rdelmar

ответ

0

Если вы хотите перемещаться, нажав на ячейку таблицы, вы должны использовать метод делегирования didSelectRowAtIndexPath таблицыView. И в этом методе просто используйте то, что вы использовали в prepareForSegue, и удалите это prepareForSegue. Потому что prepareForSegue будет вызван перед тем, как перейти к следующему представлению. И didSelect вызывается при нажатии на ячейку. Вы должны использовать prepareForSegue, когда хотите установить любые данные перед вызовом следующего вида.

Смежные вопросы