0

AssignmentViewController と UITableViewController の 2 つのコントローラーがあります。割り当てが作成され、保存されたボタンがクリックされるたびに、その割り当てオブジェクトを 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 (これら 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 から情報を正しく渡していると「思います」。しかし、アーカイブ/アーカイブ解除がまったく正しく行われていないと確信しています。アーカイブ/アーカイブ解除コードを分離して表に表示する方法がわかりません。

4

1 に答える 1

0

役立ついくつかのアイデア。

1) プロトコルを独自のファイルに入れ、必要に応じて関連する .h または .m ファイルにインポートして、すべての警告が消えるようにします。

2) 新しい割り当てがある場合は、テーブル ビュー コントローラーに送信します。

3) テーブル ビュー コントローラーは、次のことを行う必要があります。a) 可変配列に挿入または追加します。この配列は、テーブル自体で使用されるデータです。b) 次に、tableView に "insertRows..." を指定して表示するか、単に "reloadData" を使用することができます。c) これで、データをアーカイブできます。

于 2013-10-22T00:46:48.347 に答える