2013-03-19 107 views
1

我想从一个VC传递一个int到另一个。我正在这样做。传递一个Int从一个ViewController到另一个使用segue

在我的VC1中,当我调用prepareForSegue方法时,我在做一个segue showDetail。它看起来像这样。

- (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]; 
    } 
} 

在日志中我得到了正确的数字。现在在我的VC2中,我已经声明了这样一个int。

@property (nonatomic) int newsId; 

而我的setMethod看起来像这样。

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

} 

当我执行时,我进入一个循环与所有大数字。有人可以帮我解决这个问题吗?

+0

news.new_id的类型是什么?为什么你需要在-setNewsId:call中将其转换为int? – Gereon 2013-03-19 08:03:23

+0

看到我的回答.... – 2013-03-19 08:13:33

回答

8

此代码职高循环:

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

而且应该是:

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

哪里_newsId是伊娃。

UPD 似乎news.new_id有NSNumber类型。所以提取整数值

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

当我这样做,我看着日志,我得到这个消息ID是503841632 – Steaphann 2013-03-19 07:48:28

+0

所以是错的?你实际的身份证号码是什么? – 2013-03-19 07:50:47

+0

就在我通过之前,我把日志。就像你可以在我的PrepareForSegue中看到的那样。 * NSLog(@“news id is%@”,news.new_id); *这个日志总是正确的。 – Steaphann 2013-03-19 07:52:39

2

self.newsId = newsId;这将调用您的setter方法setNewsId:。它会导致无限循环。总是直接在setter和getter中访问实例变量。

_newsId = newsId; 

你的实际问题是'(int)news.new_id'这个铸造。这给你错误的价值尝试把这个值的日志。我跳news.new_idNSNumber然后要么使财产NSNumber类型,或者如果你想int只采取[news.new_id intValue]和设置。不要输入演员。

相关问题