2015-01-07 235 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 –