我的数组有问题。 在我的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 的努力),但结果仍然相同。
答案 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中的字符串。
此方法创建指定视图控制器的新实例 每次你打电话。