簡體   English   中英

NSUserDefaults無法更新nsmutable數組

[英]NSUserDefaults can't update a nsmutable array

我在NSUserDefaults中保存了一個nsmutableArray。

在以下情況下,似乎數組中的所有元素都等於0,即使在這種情況下位置1和位置5的值應為1而不是0。 我知道NSUserDefaults元素是不可變的,但是...我確實在檢索值時添加了mutableCopy。

我哪里錯了?

//create array

NSMutableArray *objArray = [[NSMutableArray alloc] init];
        for (int i=0; i< 100;i++) [objArray addObject:@"0"];
        [objArray replaceObjectAtIndex:1 withObject:@"1"];
        [[NSUserDefaults standardUserDefaults] setObject:objArray forKey:name];

// update

elementPosition = 5;
 NSMutableArray *objArray = [[NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:name]] mutableCopy];
        [objArray replaceObjectAtIndex:elementPosition withObject:@"1"];


//check the array


NSMutableArray *objArray = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:nameFile]];
    BOOL displayContent = true;


for (int i=0; i<[objArray count];i++)
{

if ([[objArray objectAtIndex:i] isEqualToString:@"0"])
{
    displayContent = false;
}
}

我想當您從UserDefault檢索可變數組並對其進行更新時,卻沒有將新的更新對象設置為UserDefault,因為它具有以前設置的舊對象。 您必須使用相同的密鑰將更新數組再次存儲到userdefault,這將更新UserDefautlt。

elementPosition = 5;
 NSMutableArray *objArray = [[NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:name]] mutableCopy];
        [objArray replaceObjectAtIndex:elementPosition withObject:@"1"];
[[NSUserDefaults standardUserDefaults] setObject:objArray forKey:name];

您應該調用syncize方法

[[NSUserDefaults standardUserDefaults] synchronize];

我認為您應該按照我的下面的代碼來修復代碼:

[[NSUserDefaults standardUserDefaults] setObject:objArray forKey:name];
[[NSUserDefaults standardUserDefaults] synchronize];

...

NSMutableArray *objArray = [[NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:name]] mutableCopy];
[objArray replaceObjectAtIndex:elementPosition withObject:@"1"];
[[NSUserDefaults standardUserDefaults] setObject:objArray forKey:nameFile];
[[NSUserDefaults standardUserDefaults] synchronize];

用以下代碼替換代碼:

//create array

NSMutableArray *objArray = [[NSMutableArray alloc] init];
for (int i=0; i< 100;i++){
    [objArray addObject:@"0"];
}
[objArray replaceObjectAtIndex:1 withObject:@"1"];
[[NSUserDefaults standardUserDefaults] setObject:objArray forKey:name];

//First mistake. Missing this. Without this line the data is not saved in NSUserDefaults
[[NSUserDefaults standardUserDefaults] synchronize];

// update

elementPosition = 5;
NSMutableArray *objArray = [[NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:name]] mutableCopy];
[objArray replaceObjectAtIndex:elementPosition withObject:@"1"];

//Second Mistake. You did not update the NSUserDefaults again.
[[NSUserDefaults standardUserDefaults] setObject:objArray forKey:name];
[[NSUserDefaults standardUserDefaults] synchronize];




//check the array
NSMutableArray *objArray = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:name]];
BOOL displayContent = true;


for (int i=0; i<[objArray count];i++)
{

    if ([[objArray objectAtIndex:i] isEqualToString:@"0"])
    {
        displayContent = false;
    }

   //Third mistake. Once the BOOL is made false in an if block you have to make it true in the else block, otherwise the value of the BOOL will remain false even if it does not enter the if block.
    else{
        displayContent = true;
    }
    NsLog(@"ArrayIndex=[%d];DisplayContent=[%d]",i,displayContent);
}

快樂的編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM