2011-10-07 105 views
0

有時候,特別是如果我玩過設置或者應用程序已經強制退出,所有的格式都會被搞亂,因爲這些值會返回null。任何想法爲什麼這些默認值會返回null?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

     static NSString *CellIdentifier = @"Cell"; 

     bool bold = [[NSUserDefaults standardUserDefaults] boolForKey:@"bold"];  
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

     if (cell == nil) { 
      cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 
      cell.textLabel.lineBreakMode = UILineBreakModeWordWrap; 
      cell.textLabel.numberOfLines = 0; 
     } 

     int fontSize = [[NSUserDefaults standardUserDefaults] integerForKey:@"fontSize"]; 
     NSString *fontFace = bold? @"Helvetica":[[NSUserDefaults standardUserDefaults] stringForKey:@"fontFace"]; 
     cell.textLabel.font = [UIFont fontWithName:fontFace size:(float)fontSize]; 

     NSString *cellText = romanized? @"Romanized":@"Text"; 

     cell.textLabel.text = [[self.myDataArray objectAtIndex:indexPath.row] objectForKey:cellText]; 

     return cell; 
    } 

編輯從InAppSettingsKit代碼,在我的rootview控制器我這樣做:

- (void)settingsViewControllerDidEnd:(IASKAppSettingsViewController*)sender { 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
     [self dismissModalViewControllerAnimated:YES]; 
     // your code here to reconfigure the app for changed settings 
    } 
+2

當您在設置NSUserDefaults的價值觀,你然後調用默認'synchronize'對象? –

+0

我正在使用InAppSettingsKit。當它返回到我的rootviewcontroller時,我會進行同步。 – Alienz

+0

我沒有使用過這個庫,所以我無法做出明確的評論。 「同步」是我最好的建議。 :-)也許有些東西在被寫出之前就被破壞了?當然,這個問題可能與NSUserDefaults完全不相關。可能是因爲您的應用程序正在被IDE(如果您在調試器中運行)中死亡或崩潰,無論是哪種情況,對於您的應用程序來說都是一個相當困難的停留,從而無法保留任何數據。 –

回答

1

當你強制退出應用程序,用戶默認設置不會被保存。

我的建議是在啓動時檢查每個密鑰,如果它存在,什麼也不做,如果不存在,則爲其設置默認值。

編輯:這是我怎麼會做了很多對象:

NSArray *keys = [NSArray arrayWithObjects:@"Key 1", @"Key 2", @"Key 3", nil]; 
NSArray *defaultValues = [NSArray arrayWithObjects:@"Default Value", [UIFont systemFontOfSize:12], [NSNumber numberWithInteger:5], nil]; 
for(NSInteger i = 0; i < [keys count]; i++){ 
    id object = [[NSUserDefaults standardUserDefaults] objectForKey:[keys objectAtIndex:i]; 
    if(!object)[[NSUserDefaults standardUserDefaults] setObject:[defaultValues objectAtIndex:i] forKey:[keys objectAtIndex:i]]; 
} 
+0

謝謝,我現在有大約15個設置,我們將添加更多。有沒有任何功能,這很容易做到這一點,而無需手動指定? – Alienz

+0

我用一小段代碼來編輯答案,如何在很多設置中使用它,只需添加一個新的鍵和一個新的默認值即可。 – EmilioPelaez

+0

有沒有辦法從root.plist中提取?那會更好嗎? – Alienz

相關問題