【问题标题】:passing an Int from one ViewController to another using a segue使用 segue 将 Int 从一个 ViewController 传递到另一个
【发布时间】:2013-03-07 19:09:39
【问题描述】:

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

在我的 VC1 中,当我调用 prepareForSegue 方法时,我正在执行 segueshowDetail。看起来像这样。

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

}

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

【问题讨论】:

  • news.new_id 的类型是什么?为什么需要在 -setNewsId: 调用中将其转换为 int?

标签: iphone ios objective-c storyboard segue


【解决方案1】:

这段代码可以循环:

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

【讨论】:

  • 当我这样做并查看日志时,我得到这个新闻 id 是 503841632
  • 就在我通过它之前,我放了一个日志。就像您在我的 PrepareForSegue 中看到的一样。 *NSLog(@"新闻 id 是 %@",news.new_id); * 此日志始终正确。
  • 对不起@StefGeelen,我不明白你的问题。 _newsId 中的值是错误的还是...?
  • 是的,_newsId(在 VC2 中)中的值是错误的。在VC1没有问题
  • 您不能只将 NSNumber 转换为 int 来转换它。请改用 integerValue。您看到的大数字是指针地址。
【解决方案2】:

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

_newsId = newsId;

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

【讨论】:

    猜你喜欢
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    相关资源
    最近更新 更多