Редактирование массива NSMutable, определенного в одном классе, из модального контроллера вида - PullRequest
0 голосов
/ 19 января 2010

Это мое приложение, над которым я работаю. http://twitpic.com/yrzpo и у него есть модальное представление, которое я хочу, чтобы пользовательское приложение добавляло в список процедур. http://twitpic.com/yrzs3

Представление таблицы на первой странице имеет источник данных NSMutableArray. На второй странице я хотел бы добавить этот массив, введя текст в верхнем текстовом поле, чтобы при появлении модального представления то, что было введено в поле, было добавлено в список.

Конечно, есть способ сделать это.

Имейте в виду, что мой шаблон для этого приложения был приложением панели вкладок. FirstViewController.h

@interface FirstViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {

NSMutableArray *routines;
}

@property (nonatomic, retain) NSMutableArray *routines;

- (IBAction)showNewEventViewController;   



@end

FirstViewController.m

#import "FirstViewController.h"
#import "NewEventViewController.h"

@implementation FirstViewController

@synthesize routines;



- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

return [routines count];

}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}

// Set up the cell...
NSString *cellValue = [routines objectAtIndex:indexPath.row];
[cell.textLabel setText:cellValue];

return cell;
}


- (IBAction)showNewEventViewController {    

NewEventViewController *controller = [[NewEventViewController alloc] initWithNibName:@"NewEventView" bundle:nil];
controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:controller animated:YES];

[controller release];
}




- (void)viewDidLoad {

routines = [[NSMutableArray alloc] init];

[routines addObject:@"Hello"];
[routines addObject:@"Temp"];
[routines addObject:@"Temp2"];
[routines addObject:@"Temp3"];
[routines addObject:@"Temp4"];


}




- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];

// Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}


- (void)dealloc {
[routines release];

[super dealloc];
}

@end

NewEventViewController.h

#import <UIKit/UIKit.h>


@interface NewEventViewController : UIViewController {

IBOutlet UITextField *RoutineTitle;

IBOutlet UITextField *RoutineInvolvment;

}
-(IBAction)done;


@end

NewEventViewController.m

#import "NewEventViewController.h"
#import "FirstViewController.h"




@implementation NewEventViewController



-(IBAction)done{


[RoutineTitle resignFirstResponder];
[RoutineInvolvment resignFirstResponder];

NSString *myString = RoutineTitle.text;
FirstViewController *FirstView = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
NSMutableArray *routines;


NSLog(@"Log the String: %@", myString);

FirstView.routines = routines;

[routines addObject:myString];



NSLog(@"Log Array :%@", FirstView.routines);




[self dismissModalViewControllerAnimated:YES];


}


- (void)viewDidLoad {
[super viewDidLoad];

}


- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];

// Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}


- (void)dealloc {

[super dealloc];
}


@end

Пожалуйста, посмотрите на код и скажите, что я делаю неправильно. Я новичок в этой игре (и особенно в приложениях, которые не являются одним видом).

1 Ответ

1 голос
/ 19 января 2010

Начал просматривать ваш код и не хватило времени.Существует ряд проблем.

Идея состоит в том, чтобы передать указатель на массив процедур в NewEventViewController, добавить в него NewEventViewController, затем при «Готово» закрыть NewEventViewController и перезагрузить UITableView с данными.в теперь измененном массиве процедур.

В NewEventViewController.h вам нужно определить NSMutableArray для указания на массив процедур, который есть в FirstViewController.h

 @interface NewEventViewController : UIViewController {

     IBOutlet UITextField *RoutineTitle;
     IBOutlet UITextField *RoutineInvolvment;
     NSMutableArray *routines;

    }

    @property(nonatomic, retain)  NSMutableArray *routines;
    -(IBAction)done;

    @end

В NewEventViewController.m вам нужнодобавьте следующее:

@ реализация NewEventViewController

@synthesize routines;

-(IBAction)done{

    // ...you can get the string directly
 [routines addObject:RoutineTitle.text]; 
 [self dismissModalViewControllerAnimated:YES];


}


- (void)dealloc {

 [super dealloc];
 [routines release];

}

Добавьте в FirstViewController следующее:

IBOutlet UITableView *myTableView;

и

@property (nonatomic, retain) NSMutableArray *routines;
@property (nonatomic, retain) UITableView *myTableView;

и в FirstViewController, добавьте следующее:

  @synthesize routines, myTableView;

    - (void)viewWillAppear:(BOOL)animated
        {
         [self.myTableView reloadData];

        }

   - (IBAction)showNewEventViewController {    



NewEventViewController *controller = [[NewEventViewController alloc] initWithNibName:@"NewEventViewController" bundle:nil];
 controller.routines=routines;
 controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
 [self presentModalViewController:controller animated:YES];

 [controller release];
}

        - (void)dealloc {
        [routines release];
        [myTableView release];
        [super dealloc];
        }

Убедитесь, что вы удалили все эти вещи ... Не требуется.У вас уже есть указатель на процедуры NSMutableArray *, которые вы передаете, когда вы нажимаете pushViewController.

NSString *myString = RoutineTitle.text;
FirstViewController *FirstView = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
NSMutableArray *routines;


NSLog(@"Log the String: %@", myString);

FirstView.routines = routines;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...