新ViewController中的数组对象保持为空

时间:2013-07-31 15:29:40

标签: ios uiviewcontroller nsarray nslog

我的数组有问题。 在我的CarViewController中有一个包含Car类对象的数组:

... Car.h

@interface Car : NSObject
@property (nonatomic, strong) NSString *name;

..和Car.m

- (void)encodeWithCoder:(NSCoder *)coder;
{
    [coder encodeObject:name forKey:@"name"];
}
- (id)initWithCoder:(NSCoder *)coder;
{
    self = [[Car alloc] init];
    if (self != nil)
    {
        name = [coder decodeObjectForKey:@"name"];
   }
    return self;
}

和CarViewController

    Car *car1 = [Car new];
        car1.name = @"A1";
...
     cars = [NSArray arrayWithObjects: car1, car2, ..., nil];

但是,当我现在尝试在NewViewController中访问此数组时,存在一个问题:

- (IBAction)btn:(id)sender {

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
CarViewController *vc = (CarViewController *)[storyboard instantiateViewControllerWithIdentifier:@"CarVC"];

Car *car = [vc.cars objectAtIndex:0];
NSLog(@"%@", car.name);
}

但是在日志中写的是 car.name =(null)。 在此先感谢您的努力。

更新

- (IBAction)btn:(id)sender {

 UINavigationController *nav = self.tabBarController.viewControllers[1];
        CarViewController *vc = nav.topViewController;
        Car *car = [vc.cars objectAtIndex:0];
        NSLog(@"%@", car.name);
}

我尝试了一些东西(感谢 rdelmar 的努力),但结果仍然相同。

1 个答案:

答案 0 :(得分:0)

如果你把这段代码

Car *car1 = [Car new];
        car1.name = @"A1";
...
     cars = [NSArray arrayWithObjects: car1, car2, ..., nil];

在视图控制器的viewDidLoad方法中,结果正常,因为您的视图尚未加载。 (尚未调用viewDidLoad方法)

我不熟悉故事板,但我想在你打电话时

CarViewController *vc = (CarViewController *)[storyboard instantiateViewControllerWithIdentifier:@"CarVC"];

它将实例化一个新的ViewController。因此,如果您尝试访问cars属性,如果此新的viewController未显示在屏幕上,那么它将为零

  

Apple文档

     

您可以使用此方法创建视图控制器对象   你想在你的程序中操作和呈现   应用。在使用此方法检索视图之前   控制器,您必须使用适当的标识符明确标记它   Interface Builder中的字符串。

     

此方法创建指定视图控制器的新实例   每次你打电话。