为什么我的可变数组在 prepareForSegue 方法中变为 NULL



我想使用故事板将数组传递给另一个类,并且我准备了以下代码,但是,日志显示可变数组为空,而这显然不是这种情况(在另一种方法中,日志显示它不是空的,它只有在调用 prepareForSegue 时才变为空)。这是为什么呢?

- (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)

显然,您正在其他地方更改self.dateChosen。这与prepareForSegue:无关.

返回并检查您在调用 segue 之前执行的操作(通过 IB 或方法)。

确保 dateChosen 属性的类型为强:

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

同样在你的"方法"方法(有史以来最糟糕的名字!)中,你应该使用setter来设置dateSelected:

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

难怪会为零。

附带说明:更好地选择方法/变量名称。不要将方法称为"方法"。如果使用数组,通常最好用复数形式命名:date*s*Chosen,而不是dateSelected。

相关内容

  • 没有找到相关文章

最新更新