将对象添加到 属性 个自定义对象的数组

Adding objects to array that is a property of custom object

我有一个包含两个自定义 classes(车辆和服务记录)的应用程序。创建车辆后,它会添加到 table 视图中,当该单元格被 selected 时,车辆会作为 属性 向前传递,以查看驻留在标签栏控制器中的控制器。其中一个选项卡是 table 视图,其中包含服务记录。要创建记录,您 select 一个条形按钮项可以打开另一个要在其中添加记录的视图控制器。

Vehicle.h

@property (nonatomic, copy) NSMutableArray *serviceRecordsArray;

Vehicle.m 初始化

self.serviceRecordsArray = [[NSMutableArray alloc] init];

FirstTableViewController prepareForSegue

TabbarViewController *tabController = segue.destinationViewController;

NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
self.rowSelected = [indexPath row];

tabController.vehicle = [self.vehicleArray objectAtIndex:self.rowSelected];
tabController.vehicleAtIndex = self.rowSelected;
tabController.vehicleArray = self.vehicleArray;

TabbarViewController.h

@property Vehicle *vehicle;
@property (nonatomic) NSInteger vehicleAtIndex; 
@property (nonatomic) NSMutableArray *vehicleArray;

@property (nonatomic, strong) ProfileViewController *profileVC;
@property (nonatomic, strong) ServiceTableViewController *serviceTableVC;

TabbarViewController viewDidLoad

UINavigationController *navController = self.viewControllers[0];
self.profileVC = [[navController viewControllers] objectAtIndex:0];
self.profileVC.vehicle = self.vehicle;
self.profileVC.vehicleAtIndex = self.vehicleAtIndex;
self.profileVC.vehicleArray = self.vehicleArray;

UINavigationController *navController2 = self.viewControllers[1];
self.serviceTableVC = [[navController2 viewControllers] objectAtIndex:0];
self.serviceTableVC.vehicle = self.vehicle;
self.serviceTableVC.vehicleAtIndex = self.vehicleAtIndex;
self.serviceTableVC.vehicleArray = self.vehicleArray;

profileVC 和 serviceTablevc.h

@property Vehicle *vehicle;
@property (nonatomic) NSInteger vehicleAtIndex;
@property (nonatomic) NSMutableArray *vehicleArray;

AddRecordViewController.h

@property Vehicle *vehicle;

AddRecordViewController.m prepareForSegue

Service *serviceRecord = [[Service alloc] init];
serviceRecord.serviceType = self.serviceTypeTextfield.text;
serviceRecord.serviceDescription = self.serviceDescriptionTextfield.text;
[self.vehicle.serviceRecordsArray addObject:serviceRecord];

serviceRecordsArray 是一个来自我的车辆 class 的 mutable 数组,我想在将车辆保存到文件系统之前将记录放入其中。问题是它是空的,因为我没有初始化车辆。我无法初始化它,因为每次添加记录时我都需要能够添加到它。我怎样才能在我的车辆 class 中有一个数组,并在车辆作为 属性 传递时添加到它。

我不确定具体错误在哪里,但整个结构已经变得足够复杂,我建议您采取不同的方法。不要在视图控制器之间传递数据,而是创建一个对象来管理您的数据模型,并让控制器在需要时使用它。

我会创建一个单例来维护车辆数组并知道哪个是当前选择的车辆。当控制器想要更新当前车辆的属性时,它会告诉数据模型这样做。选择(或创建)新车辆时,它发生在数据模型中。当控制器想要显示车辆属性时,它会从数据模型中获取当前状态。

这种方法减少了控制器之间的依赖性并简化了它们的实现。 (例如:不需要车辆详细信息的控制器不需要仅保留引用以将其传递给不同的控制器。)