2011-01-09 4 views
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 의해 는 사전하고 I 필요한 임의의 값을 설정하고 sComponents로 패키지화 할 수 있도록 사전에 작성하는 기능을 포함하는 객체

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

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

} 
(사전 메인 savefile을 체결 함) 인

필자는 파일을 업데이트하고 필요한 경우 저장과 같은 다른 일반적인 작업을 수행 할 수 있도록 응용 프로그램과 독립적으로 작동하는 유틸리티 파일을 만들려고합니다. 그것의 한 걸음을 내딛고 싶습니다.

+0

코드를 올바르게 표시하여 표시하십시오. 나는 그것을 고치려고했지만 모든 중첩 된 if를 포기했다. – Abizern

+0

죄송합니다. 코드를 고치려고했다. – Ohmnastrum

+0

어쨌든 지저분한 코드 작성에 불편을 끼쳐 드려 죄송합니다. 나는 클래스에이 모든 기능을 구현할 계획을 세웠지 만 그다지 악몽이 아니었다. – Ohmnastrum

답변

0

내가 옳다면 (코드는 정말 불쾌한 사람입니다 ...) 문제는 잘못된 방식으로 View Controller를 제시하려고한다는 것입니다.

제가 틀렸다고 정정하면 ScoreKeep이 ViewController입니까? 그렇다면 적절하게 이름을 지정해야합니다. 그것은 시작을위한 것입니다.

둘째, 현재보기 컨트롤러의보기 계층 구조에 "보기"속성을 추가하여 다른보기 컨트롤러 만 표시 할 수 없습니다. 그러면보기가 이벤트에 제대로 응답하지 않습니다.

당신이하려고하는 올바른 방법은 ScoreKeep ViewController를 모달로 표현하는 것입니다.

위임을 사용하지 않으면이 작업을 수행 할 수있는 올바른 방법이 없습니다. 이 기술을 습득해야합니다.

사용자로부터 이름을 가져 오는보기 컨트롤러는 사용자가 이름을 입력 한 마스터보기 컨트롤러라고 알려줄 필요가 있습니다. 이는 위임을 통해 성취됩니다. 당신이 무엇을해야

:

은 기본적으로 당신이 프로토콜은 사용자가 자신의 이름을 입력 할 때 호출되는 적어도 하나 개의 방법이있을 것이다 "NamePrompterViewControllerDelegate" 같은라는 만듭니다.

메인 뷰 컨트롤러 다음 프로토콜을 구현해야합니다 (추가 한 방법을 포함하는 하나) 프로토콜을 구현 인스턴스 변수가 있어야합니다 귀하의 ScoreKeepViewController (지원 프로토콜에 사과 문서 봐)를 Apple Documentation

에서이 문서를 읽어야 제시하고 모달 ViewControllers 기각에 대한 추가 정보를 원하시면

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

: 생성과 같은 ScoreKeep의 대리인으로 자신을 설정

내가 당신을 도왔 으면 좋겠다. 커버해야 할 것이 많이있다. 답을 쓰면 거의 할 수 없다.

자세한 내용은 문의 해 주시기 바랍니다.

+0

그래, 나는 그 모든 것을 진심으로 인정할 것이다. 나는 아직도 파일에서 정보를 저장하고 로딩하는 것에 대한 핸들을 얻으려고 노력했기 때문에 조금 썼다. 대리인에 대한 통찰력을 정말 고맙게 생각합니다. 나는 그 문서를 이해하는 데 어려움을 겪었지만, 유익하지만 동시에 모호하다. 또는 너무 많은 정보가 있습니다 ... 지금 작동하고 점수 등을 저장할 수 있습니다. – Ohmnastrum