1

我正在尝试将一个 int 从一个 VC 传递给另一个。我正在这样做。

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

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

}

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

4

2 回答 2

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]];
于 2013-03-19T07:41:36.617 回答
2

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

_newsId = newsId;

你的实际问题是'(int)news.new_id'这个铸造。这给你错误的值尝试为这个值写一个日志。我跳 news.new_idNSNumber然后要么将属性设置为NSNumber类型,要么如果您只想int使用 [news.new_id intValue] 并设置。不要键入 cast。

于 2013-03-19T07:43:35.120 回答