【问题标题】:Why does my mutable array become NULL in the prepareForSegue method?为什么我的可变数组在 prepareForSegue 方法中变为 NULL?
【发布时间】:2012-12-12 17:45:05
【问题描述】:

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

【问题讨论】:

  • 我们怎么知道为什么dateChosen 是零?您只在示例中提供了对它的引用,但它们都没有说明原因。

标签: ios objective-c arrays null uistoryboardsegue


【解决方案1】:

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

返回并检查在调用 segue 之前您做了什么(通过 IB 或通过方法)。

【讨论】:

  • 我唯一改变它的地方就是这里,-(void)method:(NSMutableArray *)array{ dateChosen=array; NSLog(@"以下已被复制%@", dateChosen); }
  • 但是在你使用它之前它是nil。所以你在别的地方改了。
  • 我明白了,但我自己并没有将它设置为 nil,所以怎么会发生这种情况?
  • @user1898662 您的-method: 方法是否在任何地方调用? (顺便说一句,这是一个糟糕的方法名称。)
  • 你的 dateChosen 属性是什么?它应该很强大。此外,您的“方法”应该使用设置器来设置它,即 self.dateChosen = array
【解决方案2】:

确保您的 dateChosen 属性是强类型:

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

在你的“方法”方法中(最糟糕的名字!),你应该使用 setter 来设置 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>

难怪它会为零。

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

【讨论】:

    猜你喜欢
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 2013-11-15
    相关资源
    最近更新 更多