1

ある VC から別の VC に int を渡そうとしています。私はこのようにしています。

私の VC1 ではshowDetail、prepareForSegue メソッドを呼び出すときにセグエを実行しています。このように見えます。

- (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です。

UPDnews.new_id のタイプはNSNumberのようです。したがって、整数値を抽出します

[segue.destinationViewController setNewsId:[news.new_id integerValue]];
于 2013-03-19T07:41:36.617 に答える
2

self.newsId = newsId;これにより、setter メソッドが呼び出されますsetNewsId:。無限ループを引き起こします。インスタンス変数には、常にセッターとゲッター内で直接アクセスしてください。

_newsId = newsId;

あなたの実際の問題は '(int)news.new_id' このキャストです。これにより、間違った値が得られます。この値のログを記録してみてください。次に、プロパティをタイプとして作成news.new_idするか、[ news.new_id intValue] のみを取得して設定するかのいずれかです。キャストを入力しないでください。NSNumberNSNumberint

于 2013-03-19T07:43:35.120 に答える