我正在尝试将一个int从一个VC传递给另一个VC。我是这样做的。
在我的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 :(得分: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是ivar。
<强> UPD 强> 似乎news.new_id有NSNumber类型。所以提取整数值
[segue.destinationViewController setNewsId:[news.new_id integerValue]];
答案 1 :(得分:2)
self.newsId = newsId;
这将调用您的setter方法setNewsId:
。它会导致无限循环。始终直接在setter和getter中访问实例变量。
_newsId = newsId;
你的实际问题是'(int)news.new_id'这个演员。这给你错误的值,试着为这个值写一个日志。我跳news.new_id
是NSNumber
然后将属性设为NSNumber
类型,或者如果你想int
只取[news.new_id intValue]并设置。不要输入演员。