-4

ストーリーボードを使用して配列を別のクラスに渡したいのですが、次のコードを用意しましたが、ログは変更可能な配列が null であることを示しています。は null ではなく、prepareForSegue が呼び出されたときにのみ null になります)。どうしてこれなの?

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"confirmSegue"]) {
        SBBookingConfirmation *bookingConfirmed=(SBBookingConfirmation*)segue.destinationViewController;
        NSLog(@"dates chosen - %@", self.dateChosen);    
        bookingConfirmed.confirmedTimings=self.dateChosen;
    }
}

出力:

dates chosen - (null)
4

2 に答える 2

3

明らかに、あなたは別の場所で変化しself.dateChosenています。これは とは関係ありませんprepareForSegue:

戻って、セグエが呼び出される前に何をしているかを確認してください (IB 経由またはメソッドによって)。

于 2012-12-12T17:52:33.303 に答える
1

dateChosen プロパティのタイプが strong であることを確認してください。

@property (nonatomic, strong) NSMutableArray *dateChosen;
//if you have an NSArray instead of NSMutableArray, use copy instead of strong

「メソッド」メソッドでも(これまでで最悪の名前です!)、セッターを使用してdateChosenを設定する必要があります。

-(void)method:(NSMutableArray *)array {
 self.dateChosen=array; //not dateChosen = array;
 NSLog(@"The following has been copied %@", self.dateChosen);
}

最後に、配列をどこかで初期化する必要があります。あなたがそのようなことをしたことがないなら

self.dateChosen = [NSMutableArray array];

また

self.dateChosen = <NON-NIL array pointer>

ゼロであっても不思議ではありません。

補足:メソッド/変数名をより適切に選択してください。メソッドを単に「メソッド」と呼ばないでください。配列を使用する場合は、通常、dateChosen ではなく、複数形 (date* s *Chosen) で名前を付ける方が適切です。

于 2012-12-12T18:29:10.903 に答える