2015-01-07 240 views
0

我有一个具有两个自定义类(车辆&服务记录)的应用程序。当车辆被创建时,它被添加到表格视图中,并且当选择该单元格时,车辆作为属性被传递以查看驻留在标签栏控制器中的控制器。其中一个选项卡是将具有服务记录的表格视图。要创建记录,请选择一个打开另一个视图控制器的酒吧按钮项目,以在其中添加记录。将对象添加到自定义对象属性的数组

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是我的车辆类中的一个可变数组,我希望在将车辆保存到文件系统之前放置记录。问题在于它一直没有用,因为我没有初始化车辆。我无法初始化它,因为每次添加记录时都需要添加到它。如何在车辆类别中添加阵列,并在车辆作为属性传递时添加到阵列中。

+0

你是什么意思?“我无法初始化它,因为我需要能够添加到它“?如果您不初始化它,该对象不存在并且添加到该对象是不可能的。 –

+0

我可以在对象的初始化程序中初始化它,但是当车辆作为属性传递时,数组不再被初始化。 – KFP

+0

在这种情况下,传递方式可能有问题。代码是什么样的? –

回答

0

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

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

该方法减少了控制器之间的依赖关系并简化了它们的实现。 (例如:不需要车辆细节的控制器不需要仅仅将参考传递给不同的控制器。)

+0

感谢您的建议。我只希望我完全理解如何实现所有这些。 – KFP

+0

这里有一个链接,我用**非常简单的**回答了其他人的示例代码,以便在该方向上入门。他们使用食谱而不是车辆,但结构可能会让你对原理有所了解:http://stackoverflow.com/questions/27744454/pushing-data-through-uitableviewcell-with-unwind-segues/27745042#27745042 –