我想使用故事板将数组传递给另一个类,并且我准备了以下代码,但是,日志显示可变数组为空,而这显然不是这种情况(在另一种方法中,日志显示它不是空的,它只有在调用 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。