0

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

...汽车.h

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

..和汽车.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的努力),但结果还是一样。

4

1 回答 1

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 没有出现在屏幕上,它将是 nil

苹果文档

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

每次调用此方法时,都会创建指定视图控制器的新实例。

于 2013-07-31T15:43:14.447 回答