背景について: 私は、本業で Windows の自動化とデータ変換の「専門家」です (つまり、にやにや笑っています)。2004 年に最初の Mac を購入して以来、Objective-C のコーディングにときどき手を出してきました。
私はIOSアプリに取り組んでいます。私のデータ コンテナ クラスは、ディスクから保存およびロードする方法を認識しており、各オブジェクトは-(void)saveToImpliedFilename{}
またはのインスタンス メソッドに応答します-(void)save:(NSString *)filename {}
。ストレージからデータ ファイルをロードし、それらから個別のデータ オブジェクトを作成する静的呼び出しがあります (これらはかなり軽量なオブジェクトであるため、一度に複数をロードすることについて心配する必要はありません)。アプリのドメインは、それらの多くが一度に読み込まれないようなものです。
+(NSArray *)loadData {}
それはすべてうまく機能しており、素晴らしいです。ストレージでは、オブジェクトは Xml として保存され、寿命は良好です。
私が問題を抱えているのは、次の 2 つのことが起こるようにチュートリアルを変更しようとしたときです。
簡単なメモ: POC コーディングの基礎としてチュートリアルを使用しています。その後、データ オブジェクトと途中で構築した他のユーティリティの一部を再利用して、「実際の」コーディングからやり直します。
これが私の目標と問題のリストです。
ほとんどすべての「編集」イベントでデータ オブジェクトに保存するようにテーブル ビューに指示する必要があります。私が一貫して作業できるのは、テーブルの順序を再編成することだけです。(保存ボタンと新しいエントリの追加は正常に機能します)
リストに新しいエントリを入力すると、すばらしいモーダル エディタが作成され、保存ボタンとキャンセル ボタンが見事に機能します。しかし、既存のエントリを編集すると、保存ボタンの動作を再現できません。試行するたびに、ボタンのイベントが発生しなくなります。どこが間違っているのかわかりません。
このチュートリアル シリーズの「編集可能なテーブル ビュー」プロジェクトを基礎として使用しています: http://www.aboutobjects.com/community/iphone_development_tutorial/tutorial.html
次のコードでは、[self isModal] テストは、保存/キャンセル ボタンが表示され、接続されている場所です。モーダルなのは、新規エントリ画面を表示するときだけのようです。ボタンが常に作成されるように、このようなものを配線しようとしましたが、どちらのイベントも発生しません。以下の次のブロックは、編集可能なテーブル ビューが NEW 機能で明示的に呼び出される場所ですが、同じテーブルビューの非モーダル ビューは、セレクター テーブルの選択イベントによって呼び出されます。
そう...
// code snipped for the new/modal editor
- (void)viewDidLoad {
// Uncomment the following line to preserve selection between presentations.
// self.clearsSelectionOnViewWillAppear = NO;
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
// If the user clicked the '+' button in the list view, we're
// creating a new entry rather than modifying an existing one, so
// we're in a modal nav controller. Modal nav controllers don't add
// a back button to the nav bar; instead we'll add Save and
// Cancel buttons.
//
if ([self isModal]) {
UIBarButtonItem *saveButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemSave
target:self
action:@selector(save)];
[[self navigationItem] setRightBarButtonItem:saveButton];
UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
target:self
action:@selector(cancel)];
[[self navigationItem] setLeftBarButtonItem:cancelButton];
}
// do stuff here to display my object...
}
// this code is called from the selection table to explicitly add a new data object.
- (void)add {
vhAddVehicleViewController *controller = [[vhAddVehicleViewController alloc] initWithStyle:UITableViewStyleGrouped];
id vehicle = [[Vehicle alloc] init];
[controller setVehicle:vehicle];
[controller setListcontroller:self];
UINavigationController *newNavController = [[UINavigationController alloc] initWithRootViewController:controller];
[[self navigationController] presentViewController:newNavController animated:YES completion:nil];
}
// this is where it's called on the table selection to show the same view without the save/cancel buttons.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
vhAddVehicleViewController *controller = [[vhAddVehicleViewController alloc] initWithStyle:UITableViewStyleGrouped];
NSUInteger index = [indexPath row];
id vehicle = [[self vehicles] objectAtIndex:index];
[controller setVehicle:vehicle];
[controller setTitle:[vehicle Vehiclename]];
[[self navigationController] pushViewController:controller animated:YES];
}
問題は、それを提示するとモーダルになり、プッシュしてもモーダルにならないということだと思います...? それはいいです。しかし、モーダルのテストを実行してボタンを機能させ続けようとすると、喜びはありません。タップするとボタンが描画されてクリックされますが、イベントは発生しません。
はる!:-) どうもありがとう。-- Chris (Google アカウントでログインしたので、ページの上部に「user1820796」と表示されています)肩をすくめる