我正在创建一个简单的ToDo应用程序来学习Objective-C语言。初始视图是Tableview控制器,单元格显示不同的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]];
}
请注意,在swift版本中,数组是在viewDidLoad
之上创建的。
这允许我在整个View Controller中使用该数组。
请注意,在Objective-C版本中,数组已在viewDidLoad
中创建并填充。这是一个问题,因为当我添加一个新的Todo
对象,然后调用[self.tableView reloadData];
来更新视图时,它会调用viewDidLoad
方法并重新进入数组。结果,就像我从未在第一个地方添加新的ToDo
对象一样(因为数组被重新初始化并由Todo对象初始化器重新填充(请参阅下面我添加到数组中的方法)。 / p>
以下行添加到_arrayOfTodos
。
[_arrayOfTodos addObject: [[Todo alloc]initWithInformation:@"Fly Back to SF" todoDeadline:@"8/6/17" todoStatus:inProgress]];
我想知道如何创建一个ToDo
个对象的数组,在视图加载之前(或者我可以在Controller中全局使用它的其他地方)。
这是我的MainVC.h
#import <UIKit/UIKit.h>
#import "Todo.h"
@class Todo;
@interface MainVC : UITableViewController
-(void)addNewTodo:(Todo *)todo;
@property (strong, nonatomic) NSMutableArray *arrayOfTodos;
@end
答案 0 :(得分:0)
您可以在AppDelegate.h
@interface AppDelegate : UIResponder <UIApplicationDelegate> {
}
@property (strong, nonatomic) NSMutableArray *arrayOfTodos;
您可以使用此项目在项目的任何位置访问它:
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[delegate.arrayOfTodos addObject: [[Todo alloc]initWithInformation:@"Fly Back to SF" todoDeadline:@"8/6/17" todoStatus:inProgress]];
如果为所有此类全局数据和函数创建Global
类,会更好。
答案 1 :(得分:0)
正如您在上述问题中所解释的那样
下面的行添加到_arrayOfTodos。
[_ arrayOfTodos addObject:[[Todo alloc] initWithInformation:@“Fly Back 到SF“todoDeadline:@”8/6/17“todoStatus:inProgress”];
你将挑战初始阵列。因为您通过初始化TODO
来初始化数组。相反,当您初始化数组对象并使用它可以将对象添加到数组时,您可以为TODO
创建一个comen对象,例如:
- (void)viewDidLoad {
[super viewDidLoad];
_arrayOfTodos = [[NSMutableArray alloc]init];
_todo = [[Todo alloc] init];
[_arrayOfTodos addObject: [_todo initWithInformation:@"Fly Back to SF" todoDeadline:@"8/6/17" todoStatus:inProgress]];
[_arrayOfTodos addObject: [_todo initWithInformation:@"Wash Clothes" todoDeadline:@"4/11/17" todoStatus:inProgress]];
[_arrayOfTodos addObject: [_todo initWithInformation:@"Read Books" todoDeadline:@"5/11/17" todoStatus:unfinished]];
[_arrayOfTodos addObject: [_todo initWithInformation:@"Cook Pasta" todoDeadline:@"3/9/17" todoStatus:finished]];
[_arrayOfTodos addObject: [_todo initWithInformation:@"Feed Dog" todoDeadline:@"1/1/17" todoStatus:finished]];
}
上面_todo是一个全局声明的对象,你可以用数组对象声明它
当您使用此全局声明的TODO
对象时,每次添加新对象时,您的数组都不会重新初始化。
希望这可以帮助您并解决您的问题。