我正在尝试从视图控制器1访问属性,因此我将代码放在SecondViewController的ViewDidLoad中:
SeriesViewController *teste = [[SeriesViewController alloc] init];
NSLog(@"%@", teste.seriesArray);
数组为null。 VC1中的财产声明是:
@property (strong, nonatomic) NSArray *seriesArray;
我在方法didSelectRowsAtIndexPath
中调用第二个VC- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *exercicios = [sb instantiateViewControllerWithIdentifier:@"ExerciciosViewController"];
[super tableView:tableView didSelectRowAtIndexPath:indexPath];
if ([[_seriesForDisplay objectAtIndex:indexPath.row] isEqualToString:@"Serie A"]) {
[exercicios setTitle:[_seriesForDisplay objectAtIndex:indexPath.row]];
NSLog(@"AGORA %@", array.exerciciosArray);
我也尝试了相反的方式,如下:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *exercicios = [sb instantiateViewControllerWithIdentifier:@"ExerciciosViewController"];
[super tableView:tableView didSelectRowAtIndexPath:indexPath];
if ([[_seriesForDisplay objectAtIndex:indexPath.row] isEqualToString:@"Serie A"]) {
[exercicios setTitle:[_seriesForDisplay objectAtIndex:indexPath.row]];
ExerciciosViewController *array = [[ExerciciosViewController alloc] init];
array.exerciciosArray = _seriesArray;
NSLog(@"AGORA %@", array.exerciciosArray);
但是当我到VC2时,虽然在VC1的代码中填充了exerciciosArray,但它是空的。
感谢。
更新
我正在实例化一个新的控制器。现在,我只是指着现有的一个。我现在得到一个不同的错误:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section, I have the lines:
NSLog(@"CONTADOR bla %li", _exerciciosArray.count); and:
return _exerciciosArray.count;
我在崩溃前的日志中收到了4条消息:
-[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array'.
答案 0 :(得分:0)
在初始化视图控制器之后,但在引用它之前,可能没有填充数组。例如,如果要在viewDidLoad中填充数组,那么这可能是您的问题。
如果在init方法中填充数组,那么你应该没问题。所以, 可以 执行以下操作:
@implementation SeriesViewController
-(id)init {
self = [super init];
if (self!=nil)
{
[self populateSeriesArray];
}
return self;
}
-(void)populateSeriesArray
{
NSArray *arr = [NSArray arrayWithObjects:@"Foo", @"Bar", @"Baz", nil];
self.seriesArray = arr;
}
@end
答案 1 :(得分:0)
您正在创建UIViewController的新实例,而不是指向现有/实例化的实例。这可能就是Array为空的原因。
您可以使用协议/委托,如下所述:How do I set up a simple delegate to communicate between two view controllers?
或者存储数组,例如在NSUserDefaults中。虽然NSUserDefaults并不适合这种存储,但它可以正常工作。