Search code examples
iosuitableviewxcode5

UITableView crashing when selecting row


When I click on a cell in my tableview, the app crashes with:

enter image description here

// QuestionViewController.h

@interface QuestionViewController : UIViewController <UITableViewDelegate , UITableViewDataSource> {
}

@property (nonatomic, strong) AppDelegate *app;
@property (nonatomic, retain) PFObject *feed;
@end

// QuestionViewController.m

@synthesize app, feed;

- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
{
    return [[feed objectForKey:@"options"] count];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = (UITableViewCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    NSString *cellTxt = [[[feed objectForKey:@"options"] objectAtIndex:indexPath.row] objectForKey:@"option_text"];

    [[cell textLabel] setText:cellTxt];

    return cell;

}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"clicked cell");
}

- (void)viewDidLoad {
    [super viewDidLoad];
    app = [[UIApplication sharedApplication]delegate];
    feed = [app.feed objectAtIndex:0];
}

I have implemented didSelectRowAtIndexPath, but it doesn't get called before crashing.

Other threads on SO suggest that I have unconnected outlets but I have checked that this isn't the case.

I am creating multiple instances of the above UIViewController like this:

for (int a = 0; a < totalQuestions; a++) {

    QuestionViewController *temp = (QuestionViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"aQuestion"];

    temp.view.frame = CGRectMake(self.view.frame.size.width*a+scrollWidthBeforeAppend, 0, 320, 443);

    [scroller addSubview:temp.view];

}

And adding them to a scroll view. They display correctly, the UITableView is populated, and everything seems to work fine other than when I try and click on a cell. Any suggestions?


Solution

  • Your temp UIViewControllers get deallocated by the time you press a cell. You should keep a reference to them to prevent this, for example in an array.