我有一个带有两个自定义类(车辆和服务记录)的应用程序。当车辆被创建时,它被添加到表格视图中,并且当选择该单元格时,车辆作为属性向前传递以查看驻留在标签栏控制器中的控制器。其中一个选项卡是具有服务记录的表视图。要创建记录,请选择一个条形按钮项,打开另一个视图控制器,在该视图控制器中添加记录。
Vehicle.h
@property (nonatomic, copy) NSMutableArray *serviceRecordsArray;
Vehicle.m init
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是我的车辆类中的一个可变数组,我想在将车辆保存到文件系统之前放置记录。问题在于它不在乎,因为我没有初始化车辆。我无法初始化它,因为每次添加记录时我都需要能够添加它。如何在我的车辆类中有一个阵列,并在车辆作为财产传递时添加到该阵列中。
答案 0 :(得分:0)
我不确定具体错误在哪里,但整个结构变得足够复杂,我建议你采取不同的方法。不是在视图控制器之间传递数据,而是创建一个对象来管理数据模型,让控制器在需要时使用它。
我会创建一个维护车辆阵列的单件,并知道哪个是当前选定的车辆。当控制器想要更新当前车辆的属性时,它会告诉数据模型这样做。当选择(或创建)新车辆时,它发生在数据模型中。当控制器想要显示车辆属性时,它会从数据模型中获取当前状态。
这种方法减少了控制器之间的依赖关系并简化了它们的实现。 (例如:一个不需要车辆细节的控制器不需要保留一个参考,只是将它传递给另一个控制器。)