如何在TableView w / delegation中存档/取消归档数据?

时间:2013-10-21 22:27:24

标签: iphone ios objective-c uitableview delegation

我有2个控制器,一个AssignmentViewController和一个UITableViewController。每当创建一个赋值并单击保存的按钮时,我需要将该Assignment对象发送到我的UITableViewController(使用委托)。然后,TableView需要将其存档在NSMutableArray中的文件中(TableView必须为此应用程序执行存档/取消存档)。

每当加载TableView时,它都需要取消归档数组并在表格单元格中显示作业对象。

我已经启动了代码,但我真的不知道我正确做错了什么。

该应用程序应该按此顺序工作。输入分配信息,然后按保存 - >使用委托发送新的分配对象到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

AssignmentTABLECONTROLLER.M(我所做的只是添加这两种方法)

-(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正确传递信息。但我很确定我根本没有正确归档/取消归档。我不知道如何分离存档/取消存档代码,然后在表格中显示。

1 个答案:

答案 0 :(得分:0)

一些想法可以提供帮助。

1)将协议放在自己的文件中,并根据需要将其导入相关的.h或.m文件中,以免所有警告消失。

2)当您有新的作业时,将其发送到表格视图控制器。

3)表视图控制器应该: a)插入或将其附加到可变数组中。该数组是表本身使用的数据。 b)然后你可以告诉tableView“insertRows ...”来显示它,或者只是使用“reloadData”。 c)完成后,现在可以存档数据。