Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 使用segue将Int从一个ViewController传递到另一个ViewController_Iphone_Ios_Objective C_Storyboard_Segue - Fatal编程技术网

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

Iphone 使用segue将Int从一个ViewController传递到另一个ViewController,iphone,ios,objective-c,storyboard,segue,Iphone,Ios,Objective C,Storyboard,Segue,我试图将int从一个VC传递到另一个VC。我是这样做的 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { NSIndexPath *indexPath = (NSIndexPath *)sender; News *news = [arrNews objectAtIndex:indexPath.row]; NSLog(@"news id is %@",news.new_id);

我试图将int从一个VC传递到另一个VC。我是这样做的

- (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];
    }
}
@property (nonatomic) int newsId;
-(void)setNewsId:(int)newsId{
    NSLog(@"news id is %d",newsId);
    self.newsId = newsId;

}
在我的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];
    }
}
@property (nonatomic) int newsId;
-(void)setNewsId:(int)newsId{
    NSLog(@"news id is %d",newsId);
    self.newsId = newsId;

}
在日志中我找到了正确的号码。现在,在我的VC2中,我声明了一个类似这样的int

- (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];
    }
}
@property (nonatomic) int newsId;
-(void)setNewsId:(int)newsId{
    NSLog(@"news id is %d",newsId);
    self.newsId = newsId;

}
我的setMethod是这样的

- (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];
    }
}
@property (nonatomic) int newsId;
-(void)setNewsId:(int)newsId{
    NSLog(@"news id is %d",newsId);
    self.newsId = newsId;

}

当我执行的时候,我和所有的大数字一起循环。有人能帮我解决这个问题吗?

此代码可能会循环:

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

此代码将导致循环:

-(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]];
self.newsId=newsId;这将调用setter方法setNewsId:。它会导致无限循环。始终直接在setter和getter内部访问实例变量

_newsId = newsId;
你的实际问题是这个角色的“intnews.new_id”。这会给您错误的值。请尝试为此值设置日志。I hop news.new_id是一个NSNumber,然后将属性设置为NSNumber类型,或者如果希望int仅获取[news.new_id intValue]并进行设置。不要键入cast。

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

_newsId = newsId;

你的实际问题是这个角色的“intnews.new_id”。这会给您错误的值。请尝试为此值设置日志。I hop news.new_id是一个NSNumber,然后将属性设置为NSNumber类型,或者如果希望int仅获取[news.new_id intValue]并进行设置。不要键入cast。

当我这样做并查看日志时,我得到的新闻id是503841632,就在我通过它之前,我放置了一个日志。就像你在我的准备室里看到的那样*NSLog@newsid为%@,news.new_id;*这个日志总是正确的。对不起@StefGeelen,我不理解你的问题。是_newsId中的值错误还是…?是,VC2中_newsId中的值错误。在VC1中没有问题,您不能将NSNumber强制转换为int来转换它。改用integerValue。你看到的最大的数字是指针地址。当我这样做,我看日志,我得到这个新闻id是503841632,就在我通过它之前,我放了一个日志。就像你在我的准备室里看到的那样*NSLog@newsid为%@,news.new_id;*这个日志总是正确的。对不起@StefGeelen,我不理解你的问题。是_newsId中的值错误还是…?是,VC2中_newsId中的值错误。在VC1中没有问题,您不能将NSNumber强制转换为int来转换它。改用integerValue。您看到的最大数字是指针地址。新闻的类型是什么。new\u id?为什么需要在-setNewsId:call中将其强制转换为int?news.new\u id的类型是什么?为什么需要在-setNewsId:call中将其强制转换为int?