質問

ここでは、1回のラウンドを完了すると、スコアがデフォルトのスコアエントリまたは新しく配置されたハイスコアよりも高い場合、データとデータを交換して他のすべてを押し下げる機能があります。リストから最後のエントリを削除します。現在、これは1つの交換であり、機能のために私はそれをハードコーディングし、後でそれをリファクトするつもりです。

私の主な問題は、プレーヤーの名前の実行をキャプチャするためにテキスト入力ビューを設定すると、プレイヤーが入力されてゲームをクラッシュさせずにすぐに続くことです。私が失敗しようとする試みがあった場合に備えて、デフォルト値が整っているため、テキストを設定する行をコメントしました。入力が取得されている間、どうすれば実行することができますか?デリゲート方法を設定する必要がありますか?もしそうなら、私はまだ代表者に少し混乱しています。私はそれを機能させるためにそれをセットすることができましたが、私はそれを理解していないので、私はそれで他の特別なカスタムタスクを実行することはできません。私はしばらくの間それに取り組みました、そしてそれ以上はありませんでした...

-(void)saveData:(ScoreKeep *)stats{
NSMutableDictionary *swap = [[NSMutableDictionary alloc]init];//used for swaping entries
NSString *filePath = [self pathOfFile];
NSLog(@"Writing to %@", filePath);
if ([[NSFileManager defaultManager]fileExistsAtPath:filePath]) {
    NSLog(@"Loading previous dictionary to save...");
    dataDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:filePath];
    if ([dataDictionary objectForKey:@"1"]) {
        NSMutableDictionary *highScore = [dataDictionary objectForKey:@"1"];
        if ([stats.score intValue] > [[highScore objectForKey:@"SCORE"] intValue]) {
            NSLog(@"You Win! score: %@ highscore: %@", stats.score,[NSNumber numberWithInt:[[highScore objectForKey:@"SCORE"] intValue]] );


            stats = [[ScoreKeep alloc] initWithNibName:@"Scorekeep" bundle:nil];
            NSLog(@"Setting up name entry");
            [self.view addSubview:stats.view]; //New view is added so that the player can input data(Assume it is complete);

            //stats.nameTag = setName.nameTag;//This line is executed before the new view is dismissed causing an error to occur
            [stats setupDictionary]; // It just goes down hill from here if the previous line is uncommented
            [dataDictionary setObject:stats.sComponents forKey:@"1"];
        }else {

            NSLog(@"You Lose: %@ highscore: %@", stats.score,[NSNumber numberWithInt:[[highScore objectForKey:@"SCORE"] intValue]] );
        }


        NSLog(@"Got first place entry");
    }else {

        NSLog(@"Initilizing Score");

    }


}else{
    NSLog(@"Creating new dictionary to save...");
    dataDictionary = [[NSMutableDictionary alloc]init];
}


[dataDictionary writeToFile:filePath atomically:YES];

}

助けていただければ幸いです。より多くの情報が必要な場合は、喜んで提供します。ちなみに、ScoreKeepは、必要な値を設定してscomponentsにパッケージ化できるように辞書と辞書を作成する機能を含むオブジェクトです(メインSaveFileに入力する辞書)

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@class omphalosUtility;
#pragma mark -
#pragma mark Saving data
#pragma mark -

static inline void poop(){
    NSLog(@"POOP");

}

アプリとは独立して機能するユーティリティファイルを作成して、ファイルを更新して、必要に応じて保存などの他のユニバーサル操作を実行できるようにします。それは私が取りたい方向への一歩です。

役に立ちましたか?

解決

私がそれを正しく理解すれば(コードは本当に厄介です、男...)あなたの問題は、あなたが間違った方法でビューコントローラーを提示しようとしていることです。

私が間違っている場合は私を修正してください、スコアキープはビューコントローラーですか?もしそうなら、あなたはそれに適切に名前を付ける必要があります。それは始まりです。

第二に、現在のビューコントローラーのビュー階層に「ビュー」プロパティを追加することによってのみ、別のビューコントローラーを提示することはできません。そうすれば、ビューはイベントに適切に応答しません。

あなたがやろうとしていることへの正しい方法は、スコアキープビューコントローラーをモダンに提示することです。

委任を使用せずにこれを行う他の正しい方法はありません。このテクニックを取得する必要があります。

ユーザーから名前を取得する責任者のビューコントローラーには、ユーザーが名前を入力したことをマスタービューコントローラーであることを伝える方法が必要です。そして、それは代表団を通じて達成されます。

あなたがすべきこと:

基本的に、ユーザーが名前を入力したときに呼び出される少なくとも1つの方法がある「NamePrompterViewControllerDelegate」のようなプロトコルを作成します。

ScoreKeepViewControllerには、プロトコルを実装するインスタンス変数が必要です(支援のためにプロトコルに関するAppleドキュメントをご覧ください)

メインビューコントローラー(追加した方法を含むもの)は、作成したプロトコルを実装し、そのようなスコアキープの代表として自分自身を設定する必要があります。

stats = [[ScoreKeep alloc] initWithNibName:@"Scorekeep" bundle:nil];
stats.delegate = self;

ViewControllersの提示と却下の詳細については、次のドキュメントを読む必要があります Appleドキュメント

私はあなたを助けてくれることを願っています、カバーすることがたくさんあり、答えを書くことによってほとんどできないことはほとんどできません。

クリアランスをもっとお気軽にお問い合わせください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top