使用segue将Int从一个ViewController传递给另一个ViewController

时间:2013-03-19 07:39:17

标签: iphone ios objective-c storyboard segue

我正在尝试将一个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;

}

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

2 个答案:

答案 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_idNSNumber然后将属性设为NSNumber类型,或者如果你想int只取[news.new_id intValue]并设置。不要输入演员。