2012-12-12 4 views
-4

스토리 보드를 사용하여 다른 클래스에 배열을 전달하려는 경우 다음 코드를 준비했습니다. 그러나 로그에 가변 배열이 null 인 것으로 표시됩니다. 분명히 그렇지 않은 경우입니다 (다른 메서드에서는 로그 null가 아닌 것을 나타내는 경우, prepareForSegue가 불려 갔을 때에 만 null가됩니다. 왜 이런거야?왜 mutable 배열이 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) 
+2

'dateChosen'이 nil 인 이유를 어떻게 알 수 있습니까? 당신은 견본에서 그 견해에 대한 참고 문헌을 제공했을 뿐이며, 그 이유에 관해서도 어떤 견해도 밝히지 않았습니다. – trudyscousin

답변

3

는 분명히 다른 곳 self.dateChosen 변경됩니다. 이것은 prepareForSegue:와는 아무런 관련이 없습니다.

돌아가서 segue가 호출되기 전에 (IB 또는 방법을 통해) 수행 한 작업을 확인하십시오.

+0

이것도 'Xcode'와 아무 관련이 없습니다. –

+0

내가 바꿀 수있는 유일한 곳은 여기에 - (void) 메서드 : (NSMutableArray *) array { dateChosen = array; NSLog (@ "다음은 복사되었습니다 % @", dateChosen); } – user1898662

+0

하지만 사용하기 전에는 사용하지 않습니다. 그래서 다른 곳으로 바꿨습니다. – Mundi

0

확인, 당신의 dateChosen 속성은 유형의 강한 :

당신의 "방법"방법도
@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> 

같은 것을 결코하지 않았다 경우는 nil이 될 것 당연.

참고 : 메소드/변수 이름을 더 잘 선택하십시오. 메소드를 "메소드"라고 부르지 마십시오. 배열을 사용하는 경우 대개 복수형으로 이름을 지정하는 것이 좋습니다. date * s * dateCosen 대신 Chosen을 선택합니다.

관련 문제