Я создаю простое приложение ToDo для изучения языка Objective-C. Первоначальное представление представляет собой Tableview Controller, и ячейки отображают разные файлы Todo.Создание глобального массива объектов в контроллере представления
Вот мой код в Swift Язык:
var toDos:[ToDo]=[
ToDo(taskTitle: "Feed the dog", taskDeadline: "11/23/2016", finishedState: .finished),
ToDo(taskTitle: "Eat Food", taskDeadline: "12/23/2016", finishedState: .notFinished),
ToDo(taskTitle: "Clean Up Room", taskDeadline: "10/13/2016", finishedState: .finished)
]
// MARK: ViewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
}
Вот мой код Objective-C
- (void)viewDidLoad {
[super viewDidLoad];
_arrayOfTodos = [[NSMutableArray alloc]init];
[_arrayOfTodos addObject: [[Todo alloc]initWithInformation:@"Fly Back to SF" todoDeadline:@"8/6/17" todoStatus:inProgress]];
[_arrayOfTodos addObject: [[Todo alloc]initWithInformation:@"Wash Clothes" todoDeadline:@"4/11/17" todoStatus:inProgress]];
[_arrayOfTodos addObject: [[Todo alloc]initWithInformation:@"Read Books" todoDeadline:@"5/11/17" todoStatus:unfinished]];
[_arrayOfTodos addObject: [[Todo alloc]initWithInformation:@"Cook Pasta" todoDeadline:@"3/9/17" todoStatus:finished]];
[_arrayOfTodos addObject: [[Todo alloc]initWithInformation:@"Feed Dog" todoDeadline:@"1/1/17" todoStatus:finished]];
}
Обратите внимание, как в быстрой версии, массив создается над viewDidLoad
. Это позволяет мне использовать этот массив во всем этом View Controller.
Уведомление в версии Objective-C, массив создается и заполняется в viewDidLoad
. Это создает проблему, потому что когда я добавляю новый объект Todo
, а затем вызываю [self.tableView reloadData];
, чтобы обновить представление, он вызывает метод viewDidLoad
, и он повторно вводит массив. В результате, как я никогда не добавлял новый объект ToDo
(потому что массив повторно инициализируется и повторно заполняется инициализаторами объекта Todo (см. Как я добавляю к массиву ниже).
линия ниже добавляет в _arrayOfTodos
.
[_arrayOfTodos addObject: [[Todo alloc]initWithInformation:@"Fly Back to SF" todoDeadline:@"8/6/17" todoStatus:inProgress]];
Я хотел бы знать, как создать массив ToDo
объектов ВЫШЕ зрения был нагрузка (или где-нибудь еще я могу использовать его глобально в контроллере).
Это мой MainVC.h
#import <UIKit/UIKit.h>
#import "Todo.h"
@class Todo;
@interface MainVC : UITableViewController
-(void)addNewTodo:(Todo *)todo;
@property (strong, nonatomic) NSMutableArray *arrayOfTodos;
@end
'[self.tableView reloadData]' не вызывает 'viewDidLoad'. 'viewDidLoad' вызывается только один раз, поэтому это не должно быть проблемой –
, почему он проходит через его методы и создает другой массив? @Vishnugondlekar –
Было бы лучше использовать Singleton. См. Здесь: https://xcodenoobies.blogspot.my/2012/08/how-to-pass-data-between.html – GeneCode