我正在尝试使用NSMutableArray
中ViewController
创建的ViewController2
。但它只是返回nil
。
这是我的ViewController.h文件:
@property (nonatomic, strong) NSMutableArray *total_hours;
这是我的ViewController.m文件:
total_hours = [[NSMutableArray alloc] init];
我也添加了对象。使用NSLog
显示实际已添加的内容,以便正常工作。但现在我尝试使用NSLog
在另一个ViewController2
中再次显示它们。
这是我的ViewController2.h文件:
@property(nonatomic, assign)NSMutableArray*total_hours_copy;
这是我的ViewController2.m文件:
#import "TimelisteViewController.h"
// some auto enabled code
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
TimelisteViewController *test = [[TimelisteViewController alloc]init];
NSMutableArray *total_hours_copy = test.total_hours;
NSLog(@"%@", [total_hours_copy objectAtIndex:0]);
}
为什么这不起作用?
答案 0 :(得分:2)
您的问题意味着您在ViewController中创建数组,并希望稍后将其传递给ViewController2。但是,在ViewController2的viewDidLoad方法中,您将创建一个ViewController的新实例。这是一个问题。
在以下情况下回答您的问题会更容易:
答案 1 :(得分:1)
您没有在正确的位置初始化阵列。 viewDidLoad仅在显示视图控制器时调用,而不是在初始化时调用。 您可以在视图控制器中覆盖init方法:
- (void)init{
[super init];
total_hours = [[NSMutableArray alloc] init];
}
然而,这不是通常的模式,我不会推荐它。我不确定你要做什么,但我相信最好在viewcontroller2中初始化你的数组并将其传递给你的新初始化控制器。
TimelisteViewController *test = [[TimelisteViewController alloc]init];
NSMutableArray *total_hours = [[NSMutableArray alloc] init];
//Add your data in the array
test.total_hours = total_hours;
答案 2 :(得分:0)
基于 Paul Lalonde 这一事实,如果您需要将数组从视图控制器传递到另一个控制器,您可以采用两种方式。
因此,在第二个解决方案之后,从ViewController1
开始注入数组,如下面的代码片段所示。现在两个控制器将共享相同的阵列。一个控制器进行的修改对另一个控制器可见,反之亦然......
ViewController2 secondController = // alloc-init here…
secondController.sharedArray = [self sharedArray];
其中ViewController2
会有像
@property (nonatomic, strong) NSMutableArray* sharedArray;
然后,例如,在其viewDidLoad
内或您想要的任何地方,您可以说
[self.sharedController add…]
说这个,你的申请流程是什么?例如,ViewController2
在ViewController1
之后显示UINavigationController
或类似内容的控件是{{1}}吗?
答案 3 :(得分:0)
total_hours_copy
是viewDidLoad
方法中的局部变量,而不是属性!将您的代码更改为
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
TimelisteViewController *test = [[TimelisteViewController alloc]init];
self.total_hours_copy = test.total_hours;
// or maybe self.total_hours_copy = [test.total_hours copy];
NSLog(@"%@", [total_hours_copy objectAtIndex:0]);
}