2013-02-23 113 views
0

我有一個問答遊戲,當答案是正確的,一個帶勾號的圖片將出現。由於我有很多領域,需要應用程序來記住下次啓動時已完成哪些工作。我正在使用NSUserDefaults。它工作的很好,但問題是,在第一次啓動時顯示所有「完成」圖像。我試圖繞過BOOL邏輯,但沒有成功。NSUserDefaults布爾邏輯

.H

BOOL doneState; 

的.m

- (void)viewDidLoad{ 

    [super viewDidLoad]; 
    [self doneHidden]; 
    [self checkBools]; 
} 

- (void)checkBools{ 

    //--------NSUserDefaults & tick sign hidden 
    BOOL saved = [[NSUserDefaults standardUserDefaults] boolForKey:@"hiddenDone"]; 
    NSLog (@"Value of my saved BOOL = %@", saved ? @"YES" : @"NO"); 
    done.hidden = saved; 
} 

-(void)doneHidden{ 
    done.hidden = YES; 
} 

當用戶退出應用程序,方法如下能夠記憶BOOL值

-(IBAction)flipBack:(id)sender{ 

    if (done.hidden == NO) { 
     doneState = NO; 
    } 
    else { 
     doneState = YES; 
    } 

    [[NSUserDefaults standardUserDefaults] setBool:doneState forKey:@"hiddenDone"]; 
    NSLog (@"Value of BOOL 1 = %@", doneState ? @"YES" : @"NO"); 
} 

的想法是第一隱藏名爲ImageView的「完成」,然後運行BOOL。控制檯在第一次啓動時給出結果,即使它是這樣設置的,它也不會被隱藏。

控制檯輸出:

Value of my saved BOOL = NO; 

我怎樣才能提高它的邏輯是什麼?在第一個推出

  • 隱藏圖像
  • 如果退出應用程序檢查,如果圖像是可見的,並創建BOOL
  • 下一頁推出閱讀BOOL和顯示圖像如果以前保存的如此
+1

第一次啓動時,沒有存儲任何值,因此您將收到NO。 – jrturton 2013-02-23 12:02:51

+0

因此,也許將含義從「隱藏」改爲「回答」或任何其他內容,以便所有內容都以NO開頭。 – jrturton 2013-02-23 12:08:41

回答

4

有三種選項:

  1. 更改BOOLshowImage的意義,所以你將它設置爲TRUE當你想顯示圖像。在-[NSUserDefaults registerDefaults:]
  2. 預先登記此密鑰的TRUE值代替使用boolForKey:的,使用objectForKey:和第一檢查如果對象是nil(=還未設置),且僅當非空,使用-[NSNumber boolValue]得到布爾值。
+0

謝謝大家!我預先註冊了對象和鍵,並且它工作得很好。 NSArray * keys = [NSArray arrayWithObjects:@「hiddenDone」,@「hiddenDone2」,@「hiddenDone3」,nil]; NSArray * objects = [NSArray arrayWithObjects:@「YES」,@「YES」,@「YES」,nil]; NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; NSDictionary * appDefaults = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; [defaults registerDefaults:appDefaults]; [defaults synchronize]; – Alessign 2013-02-25 13:24:11