0

学習目的で、2 つの日付間の週を計算する簡単なアプリを作成しています。このために私は作成しました

  • BITInputViewController : UITableViewController (2 つの行を含み、それぞれに 1 つの日付があります)
  • BITSelectDateViewController : UIViewController (日付を選択するための UIDatePicker を含む)

I BITInputViewController オブジェクト「開始日」と「終了日」を持つ NSMutableArray の datesArray を作成しました。

-(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 に移動すると、選択した日付がこの配列に追加されます。BITSelectDateViewController の NSLogs は、datesArray に日付が追加されたことを示しています。しかし、BITInputViewController に戻ると、このエントリは失われ、開始日と終了日だけが配列に含まれています。

それで、私は何が欠けていますか?

BITInputViewController.h

#import <UIKit/UIKit.h>
#import "BITSelectDateViewController.h"

@interface BITInputViewController : UITableViewController 

@property (nonatomic, copy) NSMutableArray *datesArray;

-(void)passDate:(NSString *)dateString;

@end

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

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

}

ログを見ると、日付が配列に追加されていることがわかりますが、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

.

4

2 に答える 2

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

ここで、アレイのコピーを作成します。2番目のコントローラーは独自のコピーで動作します。strong配列を/として渡す必要がありますretain

于 2013-03-04T13:33:46.077 に答える
0

最後にそれを見つけました。- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // ナビゲーション ロジックをここに配置できます。別のView Controllerを作成してプッシュします。

 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];

}

于 2013-03-09T15:09:26.713 に答える