NSMutableArray & Multiple Views - PullRequest
       2

NSMutableArray & Multiple Views

1 голос
/ 12 июня 2010

Я пытаюсь написать приложение с NSMutableArray, к которому необходимо получить доступ и изменить его в другом представлении.
MainViewController отображает таблицу, которая получает информацию от NSMutableArray. SecondaryViewController используется для добавления объектов в массив.
Как мне это сделать, не объявляя ее глобальной переменной?

EDIT
Это то, что я до сих пор:
(MainView .m)

#import "arrayTestViewController.h"

@implementation arrayTestViewController

-(void)viewDidLoad{
    myArray = [[NSMutableArray alloc] init];

}
-(IBAction)showArray{
    NSLog(@"Array Count: %d",[myArray count]);
}   

-(IBAction)addToArray{

[myArray addObject:@"Test"];
[myArray addObject:@"Test2"];
NSLog(@"Array Count: %d", [myArray count]);

}

-(IBAction)switchViews{
    SecondViewController *screen = [[SecondViewController alloc] initWithNibName:nil bundle:nil];
    screen.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [self presentModalViewController:screen animated:YES];
    [screen release];
}

(SecondViewController .m)

#import "SecondViewController.h"
#import "arrayTestViewController.h"

@implementation SecondViewController



-(IBAction)addToArray{
    // Trying to make a method add to myArray in the Main, but not sure of the syntax
    // I'm guessing localizing another array and pointing to the original?

}

-(IBAction)switchBack{
    [self dismissModalViewControllerAnimated:YES];
}

Ответы [ 5 ]

0 голосов
/ 21 февраля 2011

Вы должны объявить NSMutableArray и установить свойство в TestAppDelegate.h
например:

@interface TestAppDelegate : NSObject  {
    NSMutableArray *arrayList;
}
@property (nonatomic, retain) NSMutableArray *arrayList;
@end

В главном классе вы должны установить @synthesize для arrayList;

если вы хотите добавить объект в arrayList из SecondViewController, просто напишите следующий код


TestAppDelegate *appDelegate = (TestAppDelegate*)[[UIApplication sharedApplication] delegate];
[appDelegate.arrayList addObject:object];

вы можете получить доступ к этому массиву из любого вашего класса (который вы используете в своем приложении);


TestAppDelegate *appDelegate = (TestAppDelegate*)[[UIApplication sharedApplication] delegate];
1. NSMutableArray *array = [appDelegate.arrayList retain]; 

or

2. NSMutableDictionary *dictionary = [appDelegate.arrayList objectAtIndex:index];

Я думаю, это поможет вам ...

Спасибо.

0 голосов
/ 12 июня 2010

Один контроллер должен отвечать за массив и иметь доступ к массиву через этот контроллер. Например, дать MainViewController ссылку на SecondaryViewController и установить SecondaryViewController в качестве источника данных таблицы.

0 голосов
/ 12 июня 2010

Передача массива в качестве параметра в конструктор SecondaryViewController, что позволяет SecondaryViewController добавлять в него объекты, объекты, которые будут отображаться как MainViewController, снова становятся видимыми, и вы перезагружаете данные таблицы.

0 голосов
/ 12 июня 2010

Как вы отображаете SecondaryViewController?Если хотите, вы можете определить свойство в заголовке SecondaryViewController следующим образом:

{
NSMutableArray *theArray;
}

@property (nonatomic, retain) NSMutableArray *theArray;

Затем вы должны @synthesise его сразу под @ реализацией

@synthesise theArray

В MainViewController сразу послесоздать SecondaryArrayController, который вы можете сделать

theSecondaryViewController.theArray =theArrayWhichYouHaveCreated;

Теперь оба объекта имеют указатель на один и тот же объект.Читайте в одном, а пишите в другом!Я не проверял этот код, но он должен работать.Если нет, пожалуйста, прокомментируйте!

0 голосов
/ 12 июня 2010

Вы должны проверить шаблон внедрения зависимостей - http://en.wikipedia.org/wiki/Dependency_injection

Вы можете передать ссылку (указатель) на NSMutableArray при инициализации SecondaryViewController и сохранить его в локальной переменной экземпляра. Затем в любое время, когда SecondaryViewController необходим доступ к массиву, он может использовать его ссылку.

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