2

背景について: 私は、本業で Windows の自動化とデータ変換の「専門家」です (つまり、にやにや笑っています)。2004 年に最初の Mac を購入して以来、Objective-C のコーディングにときどき手を出してきました。

私はIOSアプリに取り組んでいます。私のデータ コンテナ クラスは、ディスクから保存およびロードする方法を認識しており、各オブジェクトは-(void)saveToImpliedFilename{}またはのインスタンス メソッドに応答します-(void)save:(NSString *)filename {}。ストレージからデータ ファイルをロードし、それらから個別のデータ オブジェクトを作成する静的呼び出しがあります (これらはかなり軽量なオブジェクトであるため、一度に複数をロードすることについて心配する必要はありません)。アプリのドメインは、それらの多くが一度に読み込まれないようなものです。

+(NSArray *)loadData {}

それはすべてうまく機能しており、素晴らしいです。ストレージでは、オブジェクトは Xml として保存され、寿命は良好です。

私が問題を抱えているのは、次の 2 つのことが起こるようにチュートリアルを変更しようとしたときです。

簡単なメモ: POC コーディングの基礎としてチュートリアルを使用しています。その後、データ オブジェクトと途中で構築した他のユーティリティの一部を再利用して、「実際の」コーディングからやり直します。

これが私の目標と問題のリストです。

  1. ほとんどすべての「編集」イベントでデータ オブジェクトに保存するようにテーブル ビューに指示する必要があります。私が一貫して作業できるのは、テーブルの順序を再編成することだけです。(保存ボタンと新しいエントリの追加は正常に機能します)

  2. リストに新しいエントリを入力すると、すばらしいモーダル エディタが作成され、保存ボタンとキャンセル ボタンが見事に機能します。しかし、既存のエントリを編集すると、保存ボタンの動作を再現できません。試行するたびに、ボタンのイベントが発生しなくなります。どこが間違っているのかわかりません。

このチュートリアル シリーズの「編集可能なテーブル ビュー」プロジェクトを基礎として使用しています: 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」と表示されています)肩をすくめる

4

3 に答える 3

0

これは、ビューを表示するのではなく、ビューをプッシュ/ポップすることに関連していると思います。私はそれをすべてプレゼンテーションに切り替えました、そしてそれは今私が望むように働いています。

支援者に感謝します。GUIのものに慣れているものとはまったく異なるパラダイムですが、私はそこに到達しています。

ありがとう!

于 2012-11-14T15:34:22.743 に答える
0

電話するのを忘れた[super viewDidLoad];

于 2012-11-13T13:37:49.703 に答える
0

アップデート

ビューコントローラーを押すと左側にあるキャンセルボタンを外してみてください。保存が機能するかどうかを確認します。問題は、View Controller が押されたときにナビゲーション バーに左ボタンを追加しないことだと思います。

どのメソッド署名を使用していますか?

- (void)save
{
    NSLog(@"Saving");
}

または

- (void)save:(id)sender
{
    NSLog(@"Saving");
}
于 2012-11-13T13:13:29.233 に答える