학습 목적으로 두 날짜 사이의 주를 계산하는 간단한 앱을 만들고 있습니다. 내가 NSMutableArray 추가 데이터 손실
- 을 만든이를 위해 BITInputViewController : UIViewController에 내가 가지고 BITInputViewController
을 (날짜를 선택하는 UIDatePicker을 포함) :있는 UITableViewController
-(id)init
{
// Call the superclass's designated initializer
self = [super initWithStyle:UITableViewStyleGrouped];
if (self) {
self.title = @"Calculate weeks";
datesArray = [NSMutableArray arrayWithObjects:@"Start date", @"End date", nil];
}
return self;
}
은 선택한 날짜는이 배열에 추가해야합니다. BITSelectDateViewController의 NSLog는 날짜가 datesArray에 추가되었음을 나타냅니다. 그러나 BITInputViewController로 돌아 가면이 항목은 손실되고 시작 및 끝 날짜 만 배열에 있습니다.
그래서 나는 무엇을 놓치고 있습니까?
BITInputViewController.h
로그를 보면 당신은 날짜를 볼 수- (void)LabelChange:(id)sender{
NSLog(@"<SDV> LabelChange: method");
BITInputViewController *vc = [[BITInputViewController alloc]init];
NSDateFormatter *df = [[NSDateFormatter alloc] init];
df.dateStyle = NSDateFormatterMediumStyle;
dateLabel.text = [NSString stringWithFormat:@"%@",
[df stringFromDate:datePicker.date]];
[vc passDate:dateLabel.text];
NSLog(@"<SDV> LabelChange: to passDate %@:",dateLabel.text);
if (vc.datesArray) {
for (NSString *d in vc.datesArray) {
NSLog(@"<SDV> Dump of datesrray in labelChange: %@",d);
}
}
else
NSLog(@"<SDV>!ivc.datesArray");
}
-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[[self view] endEditing:YES];
NSLog(@"<SDV>dateLabel in viewWillDisappear: %@", dateLabel.text);
}
BITInputViewController.m
-(void)passDate:(NSString *)dateString {
[datesArray addObject:dateString];
NSLog(@"<IVC> passdate:(NSString *)dateString %@",dateString);
NSLog(@"<IVC> rowcount datesArray %d", [datesArray count]);
for (NSObject *d in datesArray) {
NSLog(@"<IVC> Dump of passdate:(NSString *)dateString %@",d);
}
}
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
for (NSString *d in datesArray) {
NSLog(@"<IVC> viewWillAppear: datesArray: %@",d);
}
NSLog(@" %p", datesArray);
}
BITSelectedDateViewController.m가 배열에 추가됩니다
#import <UIKit/UIKit.h>
#import "BITSelectDateViewController.h"
@interface BITInputViewController : UITableViewController
@property (nonatomic, copy) NSMutableArray *datesArray;
-(void)passDate:(NSString *)dateString;
@end
,하지만 다시 InputViewController 그것은 손실됩니다.
2013-03-04 14:06:11.713[28900:c07] <IVC> viewWillAppear: datesArray: Start date
2013-03-04 14:06:11.714[28900:c07] <IVC> viewWillAppear: datesArray: End date
2013-03-04 14:06:11.717[28900:c07] set dates
2013-03-04 14:06:11.719[28900:c07] set dates
2013-03-04 14:06:13.533[28900:c07] <SDV> datelabel viewWillAppear Mar 4, 2013
2013-03-04 14:06:14.895[28900:c07] <SDV> LabelChange: method
2013-03-04 14:06:14.897[28900:c07] <IVC> passdate:(NSString *)dateString Mar 5, 2013
2013-03-04 14:06:14.897[28900:c07] <IVC> aantal rijen in datesArray 3
2013-03-04 14:06:14.898[28900:c07] <IVC> Dump of passdate:(NSString *)dateString Start date
2013-03-04 14:06:14.898[28900:c07] <IVC> Dump of passdate:(NSString *)dateString End date
2013-03-04 14:06:14.899[28900:c07] <IVC> Dump of passdate:(NSString *)dateString Mar 5, 2013
2013-03-04 14:06:14.899[28900:c07] <SDV> LabelChange: to passDate Mar 5, 2013:
2013-03-04 14:06:14.900[28900:c07] <SDV> Dump of datesrray in labelChange: Start date
2013-03-04 14:06:14.900[28900:c07] <SDV> Dump of datesrray in labelChange: End date
2013-03-04 14:06:14.901[28900:c07] <SDV> Dump of datesrray in labelChange: Mar 5, 2013
2013-03-04 14:06:16.489[28900:c07] <SDV>dateLabel in viewWillDisappear: Mar 5, 2013
2013-03-04 14:06:16.489[28900:c07] <IVC> viewWillAppear: datesArray: Start date
2013-03-04 14:06:16.490[28900:c07] <IVC> viewWillAppear: datesArray: End date
.
안녕, 나는 그것이 @property로 변경 한 빠른 응 답 주셔서 감사합니다 (비 원자, 유지) NSMutableArray를 * datesArray을; 하지만 여전히 추가 된 날짜가 – Eloy
이고 @property (비 원자력, 강력한) NSMutableArray * datesArray; 트릭도하지 않습니다. – Eloy
두 컨트롤러에서'retain'을 사용합니까? 두 컨트롤러에서 단일 객체를 사용하고 있는지 확인하려면 NSLog (@ "% p", array)'를 사용할 수 있습니다. – John