2013-03-19 2 views
1

J'essaie de passer un int d'un VC à un autre. Je le fais comme ça.en passant un Int d'un ViewController à un autre en utilisant un segment

Dans mon VC1 je fais un segue showDetail quand j'appelle la méthode prepareForSegue. Ça ressemble à ça.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    NSIndexPath *indexPath = (NSIndexPath *)sender; 
    News *news = [arrNews objectAtIndex:indexPath.row]; 
    NSLog(@"news id is %@",news.new_id); 
    if ([segue.identifier isEqualToString:@"showDetail"]) { 
     [segue.destinationViewController setNewsId:(int)news.new_id]; 
    } 
} 

Dans le journal, je récupère le bon numéro. Maintenant, dans mon VC2 j'ai déclaré un int comme ça.

@property (nonatomic) int newsId; 

Et ma méthode setMethod ressemble à ceci.

-(void)setNewsId:(int)newsId{ 
    NSLog(@"news id is %d",newsId); 
    self.newsId = newsId; 

} 

Lorsque je suis exécuté, je viens en boucle avec tous les grands nombres. Quelqu'un peut-il m'aider avec ce problème?

+0

Quel est le type de news.new_id? Pourquoi avez-vous besoin de le convertir en int dans votre -setNewsId: appel? – Gereon

+0

voir ma réponse .... –

Répondre

8

Ce code couse à boucle:

-(void)setNewsId:(int)newsId{ 
    NSLog(@"news id is %d",newsId); 
    self.newsId = newsId; 
} 

et devrait être:

-(void)setNewsId:(int)newsId{ 
    NSLog(@"news id is %d",newsId); 
    _newsId = newsId; 
} 

Où _newsId est Ivar.

UPD Semble que news.new_id a le type NSNumber. Donc extraire la valeur entière

[segue.destinationViewController setNewsId:[news.new_id integerValue]]; 
+0

Lorsque je fais cela et que je regarde le journal, je reçois cette nouvelle ID est 503841632 – Steaphann

+0

Alors est-ce faux? Quel est votre numéro d'identification réel? –

+0

Juste avant de le passer, j'ai mis un journal. Comme vous pouvez le voir ci-dessus dans mon PrepareForSegue. * NSLog (@ "ID de nouvelles est% @", news.new_id); * Ce journal est toujours correct. – Steaphann

2

self.newsId = newsId; Cette appellera votre méthode setter setNewsId:. Cela provoque une boucle infinie. Accédez toujours directement à la variable d'instance à l'intérieur du setter et du getter.

_newsId = newsId; 

Votre problème actuel est '(int) news.new_id' cette diffusion. Cela vous donne une mauvaise valeur, essayez de mettre un journal pour cette valeur. Je saute news.new_id est un NSNumber alors soit faire la propriété en tant que type NSNumber ou si vous voulez int seulement prendre [news.new_id intValue] et définir. Ne tapez pas cast.

Questions connexes