2013-03-04 2 views
0

학습 목적으로 두 날짜 사이의 주를 계산하는 간단한 앱을 만들고 있습니다. 내가 NSMutableArray 추가 데이터 손실

  • 을 만든이를 위해 BITInputViewController : UIViewController에 내가 가지고 BITInputViewController

을 (날짜를 선택하는 UIDatePicker을 포함) :있는 UITableViewController

  • BITSelectDateViewController (각각 날짜가 2 개 행을 포함) "start date"및 "end date"라는 객체가있는 NSMutableArray datesArray를 만들었습니다. 나는 BITSelectDateViewcontroller에 가면

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

    .

  • 답변

    0

    마지막으로 발견했습니다.- (void) tableView : (UITableView *) tableView didSelectRowAtIndexPath : (NSIndexPath *) indexPath { // 탐색 논리가 여기에 해당 될 수 있습니다. 다른 뷰 컨트롤러를 생성하고 푸시합니다.

    BITSelectDateViewController *selectDateViewController = [[BITSelectDateViewController alloc] init];  
    selectDateViewController.vc = self;// Set this property as you prepare the selectDateViewController 
    
    // Pass the selected object to the new view controller. 
    [self.navigationController pushViewController:selectDateViewController animated:YES]; 
    

    }

    4
    @property (nonatomic, copy) NSMutableArray *datesArray; 
    

    여기에서 어레이 복사본을 만듭니다. 두 번째 컨트롤러는 자체 복사본으로 작동합니다. 배열을 strong/retain으로 전달해야합니다.

    +0

    안녕, 나는 그것이 @property로 변경 한 빠른 응 답 주셔서 감사합니다 (비 원자, 유지) NSMutableArray를 * datesArray을; 하지만 여전히 추가 된 날짜가 – Eloy

    +0

    이고 @property (비 원자력, 강력한) NSMutableArray * datesArray; 트릭도하지 않습니다. – Eloy

    +0

    두 컨트롤러에서'retain'을 사용합니까? 두 컨트롤러에서 단일 객체를 사용하고 있는지 확인하려면 NSLog (@ "% p", array)'를 사용할 수 있습니다. – John