2013-03-19 82 views
1

我想從一個VC傳遞一個int到另一個。我正在這樣做。傳遞一個Int從一個ViewController到另一個使用segue

在我的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; 

} 

當我執行時,我進入一個循環與所有大數字。有人可以幫我解決這個問題嗎?

+0

news.new_id的類型是什麼?爲什麼你需要在-setNewsId:call中將其轉換爲int? – Gereon 2013-03-19 08:03:23

+0

看到我的回答.... – 2013-03-19 08:13:33

回答

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是伊娃。

UPD 似乎news.new_id有NSNumber類型。所以提取整數值

[segue.destinationViewController setNewsId:[news.new_id integerValue]]; 
+0

當我這樣做,我看着日誌,我得到這個消息ID是503841632 – Steaphann 2013-03-19 07:48:28

+0

所以是錯的?你實際的身份證號碼是什麼? – 2013-03-19 07:50:47

+0

就在我通過之前,我把日誌。就像你可以在我的PrepareForSegue中看到的那樣。 * NSLog(@「news id is%@」,news.new_id); *這個日誌總是正確的。 – Steaphann 2013-03-19 07:52:39

2

self.newsId = newsId;這將調用您的setter方法setNewsId:。它會導致無限循環。總是直接在setter和getter中訪問實例變量。

_newsId = newsId; 

你的實際問題是'(int)news.new_id'這個鑄造。這給你錯誤的價值嘗試把這個值的日誌。我跳news.new_idNSNumber然後要麼使財產NSNumber類型,或者如果你想int只採取[news.new_id intValue]和設置。不要輸入演員。

相關問題