2013-10-21 26 views
0

我有2個控制器,一個AssignmentViewController和一個UITableViewController。每當創建一個賦值並單擊保存的按鈕時,我需要將該賦值對象發送給我的UITableViewController(使用委託)。 TableView然後需要將其歸檔到NSMutableArray中的文件中(TableView必須對此應用進行歸檔/解除歸檔)。如何在帶有委託的TableView中存檔/取消存檔數據?

並且無論何時加載TableView,都需要將數組取消歸檔並將Homework對象顯示在表單元格中。

我已經啓動了代碼,但我不知道我在做什麼正確和不正確。

應用程序應按此順序工作。輸入賦值信息,然後按保存 - >使用委託將新的賦值對象發送到TableViewController - >將NSMutableArray中的對象歸檔到文件 - >每當表視圖在屏幕上時,在單元格中取消歸檔數組和顯示賦值對象。

以下是我有:

AssignmentViewController.h

@interface Assignment : UIViewController 

< 
UITextViewDelegate, 
AssignmentTableControllerDelegate 
//Error:Cannot find protocol declaration "AssignmentTableControllerDelegate" 

> 
@property(nonatomic) IBOutlet UITextField *ClassNameField; 
@property(nonatomic) IBOutlet UILabel *ClassNameLabel; 
@property(nonatomic) IBOutlet UITextField *AssignmentTitleField; 
@property(nonatomic) IBOutlet UILabel *AssignmentTitleLabel; 

@property (nonatomic, strong) Homework *homeworkAssignment; 


- (IBAction)Save:(UIButton *)sender; 
@end 

AssignmentViewController.m

- (IBAction)Save:(UIButton *)sender { 


self.homeworkAssignment = [[Homework alloc] init]; 
self.homeworkAssignment.className = self.ClassNameField.text; 
self.homeworkAssignment.assignmentTitle = self.AssignmentTitleField.text; 

//Sending info over to TableController 

self.assignmentTableController.delegate= self; 
self.assignmentTableController.homeworkInTable.className= self.ClassNameField.text; 
self.assignmentTableController.homeworkInTable.assignmentTitle=self.AssignmentTitleField.text; 

AssignmentTABLEController.h

#import "Assignment.h" 

@protocol AssignmentTableControllerDelegate; 


@interface AssignmentTableController : UITableViewController 

@property (nonatomic, strong) Homework *homeworkInTable; 
@property (nonatomic, assign) id <AssignmentTableControllerDelegate> delegate; 
@property (nonatomic,strong) NSMutableArray *MyHomeworkArray; 

-(IBAction)ArchiveData:(id)sender; 

@end 

@protocol AssignmentTableControllerDelegate <NSObject> 

-(NSMutableArray *)UnarchiveData; 
@end 

Assignme ntTABLECONTROLLER.M(我所做的只是加這2種方法)

-(void)ArchiveData:(id)sender 
{ 
[self.MyHomeworkArray addObject:self.homeworkInTable]; 


NSString *filePath = [self dataFilePath];//file created 
//Archive my object 
[NSKeyedArchiver archiveRootObject:self.MyHomeworkArray toFile:filePath]; 
} 


-(NSMutableArray *)UnarchiveData 
{ 
Homework *archivedHomework = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; 
           //Error:use of undeclared identifier:filePath^^ 

} 

我是新來這個,所以我知道那裏有很多錯誤。我「認爲」我正在從AssignmentViewController正確傳遞信息,並帶有委派。但我確信我沒有正確存檔/解除存檔。我不知道如何分開存檔/解除存檔的代碼,然後顯示在表中。

回答

0

幾個想法來幫助。

1)將協議放在自己的文件中,並根據需要將其導入到相關的.h或.m文件中,以便所有警告消失。

2)當你有一個新的任務,發送它到表視圖控制器。

3)表視圖控制器應該: a)插入它或將其追加到一個可變數組中。這個數組是表本身使用的數據。 b)然後你可以告訴tableView「insertRows ...」來顯示它,或者只是使用「reloadData」。 c)完成後,現在可以歸檔數據。