0

以下を使用すると、アプリがすべてのデータを失うことがあります。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Navigation logic may go here. Create and push another view controller.
    /*
     <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
     // ...
     // Pass the selected object to the new view controller.
     [self.navigationController pushViewController:detailViewController animated:YES];
     */

    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    switch (indexPath.row)
    {
        case kLANG_HEBREW:
            // Hebrew is the default
            self.arrayOfLanguages = [NSMutableArray arrayWithObjects:@"he", @"en", nil];
            break;
        case kLANG_ENGLISH:
            self.arrayOfLanShorts = [NSMutableArray arrayWithObjects:@"en", @"he", nil];
            break;
        case kLANG_RUSSIAN:
            self.arrayOfLanShorts = [NSMutableArray arrayWithObjects:@"ru", @"en", nil];
            break;
        case kLANG_ARABIC:
            self.arrayOfLanShorts = [NSMutableArray arrayWithObjects:@"ar", @"en", nil];
            break;
    }
    [[NSUserDefaults standardUserDefaults] setObject:self.arrayOfLanShorts forKey:@"AppleLanguages"];
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"come_from_change_lang"];
    [[NSUserDefaults standardUserDefaults] synchronize];    
    [self.navigationController popToRootViewControllerAnimated:YES];
}

アプリのデータを消去しないので、これは非常に奇妙です。

4

1 に答える 1

0

私の推測では、あなたの switch ステートメントは常に設定self.arrayOfLanShortsされているわけではなく、nil になっていると思います。次に、ユーザーのデフォルトでそれを設定すると、保存された値が無効になり、データが失われたように見えます。配列をデフォルトに追加する前に、配列が nil ではないことを if ステートメントでチェックし、それがどのように switch ステートメントにヒットしなかったかを追跡します。

于 2013-10-03T18:09:23.610 に答える