iPhone добавить в NSMutableArray из другого viewController - PullRequest
0 голосов
/ 02 января 2011

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

Я новый разработчик IOS и учусь только пару месяцев.Я разрабатываю приложение для iPhone для моей диссертации в университете.Приложение представляет собой просто руководство для людей, которые хотят разработать для себя iPhone, состоящее из учебных пособий.Он состоит из множества табличных представлений, но есть одна вещь, которая поставила меня в тупик.

Что я пытаюсь сделать: одна функция, которую я пытаюсь включить в свое приложение, - это функция закладок, она будет доступна на вкладкебар.Я хочу иметь возможность нажать на кнопку из любого файла пера (учебник), который добавляет строку к существующему NSMutableArray.Эта строка будет соответствовать названию учебника, в котором было выполнено IB-действие, и после добавления в массив я могу загрузить файл пера при выборе строки по пути индекса.

Проблема: я могу добавить любойОбъект в массив из файла реализации, который содержит массив, но не может выяснить, как добавить его из другого файла реализации.Представление UITable отлично заполняет массив, но добавление новой записи - это другая история.

Я покажу вам свой код, но я опущу все, что не связано.

BookmarksViewController.h

@interface BookmarksViewController : UITableViewController {
 NSMutableArray *bookmarksArray;
}

@property (nonatomic, retain) NSMutableArray *bookmarksArray;
@end

BookmarksViewController.m

-(void)viewDidLoad {

 bookmarksArray  = [[NSMutableArray alloc] init];

 NSLog(@"String Added");
    [bookmarksArray addObject:@"String"];
  [super viewDidLoad];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {   
    // Configure the cell...
    cell.textLabel.text = [bookmarksArray objectAtIndex:indexPath.row];
    return cell;
}

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

СЕЙЧАС ДЛЯ КОНТРОЛЛЕРА ВТОРОГО ВИДА

Ch01GettingStarted.h

@interface Ch01GettingStarted : UIViewController {
 IBOutlet UIScrollView *ScrollView;
}
-(IBAction) pushChap01Bookmark:(id)sender;

@end

Ch01GettingStarted.m

-(IBAction) pushChap01Bookmark:(id)sender{ 

 BookmarksViewController *bookmarksViewController = [[BookmarksViewController alloc]init];

 [bookmarksViewController.bookmarksArray addObject:@"NewString"];
 NSLog(@"ADD ENTRY");
 [bookmarksViewController.tableView reloadData];
 NSLog(@"RELOAD TABLE");
 [bookmarksViewController release];
 NSLog(@"ADD BOOKMARK RELEASE");
}

Кстати - IB-действие было объявлено в заголовочном файле.

Ах, я изначально пытался сделать это как '[BookmarksViewController.bookmarksArray addObject: @ "NewString"];'но я обнаружил ошибку «ожидается»: «в». »и где-то прочитал, что мне нужно использовать переменную экземпляра BookmarksViewController, поэтому я объявил ее чуть выше метода addObject.

Пожалуйста, будьте осторожнысо мной, потому что я давно этим не занимался, но это, безусловно, будет важной частью моего профессионального будущего.

Любое понимание, которое кто-либо может мне предложить, будет волшебным.

Спасибо, спасибо, спасибо.

Ответы [ 3 ]

1 голос
/ 02 января 2011

Проблема заключается в этом методе:

-(IBAction) pushChap01Bookmark:(id)sender

Вы создаете НОВЫЙ bookmarksViewController здесь, делая это:

BookmarksViewController *bookmarksViewController = [[BookmarksViewController alloc]init];

Вы не хотите этого делать, потому что хотите обновить текущий контроллер вида. Вам необходимо создать ссылку из Ch01GettingStarted.

Предполагая, что вы используете Interface Builder, вы можете создать эту ссылку с помощью IBOutlet. В интерфейсе Ch01GettingStarted добавьте следующую строку:

IBOutlet BookmarksViewController *bookmarksViewController;

(в скобках)

Я думаю, вы уже знаете, как связать это в Интерфейсном Разработчике.

Тогда просто удалите эту строку:

BookmarksViewController *bookmarksViewController = [[BookmarksViewController alloc]init];

И эта строка:

[bookmarksViewController release];

И это должно работать.

Почему? Переменная 'bookmarksViewController' теперь ссылается на исходный объект (тот, который вы создали в Интерфейсном Разработчике), который фактически отображается.

0 голосов
/ 17 мая 2012

Потому что после bookmarksViewController создано.Метод ViewDidLoad еще не запущен.bookmarksArray не было создано.Так что bookmarksArray = nil.Вы не можете добавить объект к нулевому объекту.Во втором Viewcontroller, вы должны создать bookmarksViewController в методе loadView.И addobject в pushChap01Bookmark.

Я не очень хороший английский.Я надеюсь, что вы можете понять это.: D

0 голосов
/ 02 января 2011

Просто чтобы быть уверенным.У вас есть этот метод в BookmarksViewController.m?

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  [bookmarksArray count];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...