tableView didSelectRowAtIndexPath ne fonctionne pas correctement sur iOS 7. Pourquoi?

En premier lieu, je voudrais dire que je suis le seul à faire cette question, parce que je voudrais comprendre ce qui se passe.

J'ai ouvert un vieux projet Xcode (très simple) dans une nouvelle installation sur Xcode5.
Quand je me rends compte que cela ne fonctionne pas sur iOS 7. Pourquoi? Ne sais pas..

J'ai vu quelques autres questions, n'obtenez pas une réponse utile, j'ai donc fait un test simple.
Dans le UITableViewController tous fonctionne bien sauf sur didSelectRowAtIndexPath

Vérifier

RootViewController.h:

@interface RootViewController : UITableViewController

@property (strong, nonatomic) NSMutableArray *items;
@end

RootViewController.m
Dans le viewDidLoad je initialisation de la matrice (avec des chaînes).

Mettre en œuvre la source de données et de déléguer des méthodes (et oui j'ai mis le délégué et la source de données à la tableView)

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [_items count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    //Configure the cell...
    cell.textLabel.text = [_items objectAtIndex:indexPath.row];

    return cell;
}

Le problème est ici:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    //Navigation logic may go here, for example:
    //Create the next view controller.
    DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];

    //Push the view controller.
    [self.navigationController pushViewController:detailViewController animated:NO];

    detailViewController.detailLabel.text = [_items objectAtIndex:indexPath.row];
}

DetailViewController est un simple UIViewController:

(oui, j'ai mis le IBOutlet sur fichier nib)

@interface DetailViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *detailLabel;

@end

Le problème est que cela ne fonctionne pas sur iOS7, l'étiquette dans DetailViewController n'est pas mis à jour. J'ai essayer de mettre le texte de l'étiquette avant et l'après de pushViewController.

Cela fonctionne sur toutes les versions précédentes d'iOS.

Pourquoi ne fonctionne pas sur iOS 7 ??

La seule manière pour moi de ce travail est, comme je l'ai vu sur cette autre question:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    //Navigation logic may go here, for example:
    //Create the next view controller.
    DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];

    //Push the view controller.
    [self.navigationController pushViewController:detailViewController animated:YES];

    dispatch_async(dispatch_get_main_queue(), ^{
        detailViewController.detailLabel.text = [_items objectAtIndex:indexPath.row];
    });
}

Quelqu'un peut-il m'aider à comprendre ce qui se passe ici??

Merci!

_

MODIFIER

elle fonctionne comme ceci:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    //Navigation logic may go here, for example:
    //Create the next view controller.
    DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];

    //Push the view controller.
    [self.navigationController pushViewController:detailViewController animated:YES];

    if (detailViewController.view) {
        //do notihing
    }
    detailViewController.detailLabel.text = [_items objectAtIndex:indexPath.row];
}
vous essayez de placer un point d'arrêt à l'intérieur de cette méthode pour voir si s'appelle?
oui, elle est appelée..
vous travaillez sur une application iPhone?
Malheureusement, ne peut pas le tester sur l'appareil avec iOS 7, je n'ai pas du tout avec elle en ce moment. Mais j'ai dit qu'il travaille sur une version précédente d'iOS 6.1.
ok la question est tout pour aujourd'hui est a été pour iphone ou ipad

OriginalL'auteur Frade | 2013-10-11