Iphone 使用segue将Int从一个ViewController传递到另一个ViewController
我试图将int从一个VC传递到另一个VC。我是这样做的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);
- (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?