NSMutableArray для NSUserDefaults, а затем получить его iPhone - PullRequest
0 голосов
/ 14 марта 2012

Код ниже можно использовать пять раз в день. Каждый раз, когда создается новое значение, оно должно быть сохранено в NSMutableArray, и предыдущие значения не должны быть удалены оттуда.

Возможно ли это?

if ([day isEqualToString:@"f"]) {

        if ([name isEqualToString:@"f"]) {
            NSString *faj = [[NSString alloc] initWithString:@"f1"];
            [friArray addObject:faj];
        }
        else if ([name isEqualToString:@"z"]) {
            NSString *faj = [[NSString alloc] initWithString:@"f2"];
            [friArray addObject:faj];
        }
        else if ([name isEqualToString:@"a"]) {
            NSString *faj = [[NSString alloc] initWithString:@"f3"];
            [friArray addObject:faj];
        }
        else if ([name isEqualToString:@"m"]) {
            NSString *faj = [[NSString alloc] initWithString:@"f4"];
            [friArray addObject:faj];
        }
        else if ([name isEqualToString:@"i"]) {
            NSString *faj = [[NSString alloc] initWithString:@"f5"];
            [friArray addObject:faj];
        }

    }

Как и в этом коде, если NSString F1 сохранено в моем friArray, в следующий раз значение может быть f2, f3, f4 or f5. Теперь, когда я буду извлекать массив из NSUserdefaults. В нем должны быть сохранены все значения.

Как мне этого добиться?

EDITED:

Я пробовал это так, но это дает мне friarray::(null). В чем может быть проблема?

NSUserDefaults *day1 = [NSUserDefaults standardUserDefaults];
    friArray = [[day1 objectForKey:@"frArr"] mutableCopy];

    name = @"f";

    if ([day isEqualToString:@"f"]) {

        if ([name isEqualToString:@"f"]) {
            NSString *faj = [[NSString alloc] initWithString:@"f1"];
            [friArray addObject:faj];
        }
        else if ([name isEqualToString:@"z"]) {
            NSString *faj = [[NSString alloc] initWithString:@"f2"];
            [friArray addObject:faj];
        }
        else if ([name isEqualToString:@"a"]) {
            NSString *faj = [[NSString alloc] initWithString:@"f3"];
            [friArray addObject:faj];
        }
        else if ([name isEqualToString:@"m"]) {
            NSString *faj = [[NSString alloc] initWithString:@"f4"];
            [friArray addObject:faj];
        }
        else if ([name isEqualToString:@"i"]) {
            NSString *faj = [[NSString alloc] initWithString:@"f5"];
            [friArray addObject:faj];
        }

        [day1 setObject:friArray forKey:@"frArr"];

        NSLog(@"friarray::%@", friArray);

    }

Ответы [ 3 ]

1 голос
/ 14 марта 2012

Привет Попробуйте это ....

    friArray =//Load as NSMutableArray from NSUserDefaults Dictionary for some key

    if(!friArray)friArray =[[NSMutableArray alloc]init];

    if ([day isEqualToString:@"f"]) {

            if ([name isEqualToString:@"f"]) {

                NSString *faj = [[NSString alloc] initWithString:@"f1"];
                [friArray addObject:faj];
            }
            else if ([name isEqualToString:@"z"]) {

                NSString *faj = [[NSString alloc] initWithString:@"f2"];
                [friArray addObject:faj];
            }
            else if ([name isEqualToString:@"a"]) {

                NSString *faj = [[NSString alloc] initWithString:@"f3"];
                [friArray addObject:faj];
            }
            else if ([name isEqualToString:@"m"]) {

                NSString *faj = [[NSString alloc] initWithString:@"f4"];
                [friArray addObject:faj];
            }
            else if ([name isEqualToString:@"i"]) {

                NSString *faj = [[NSString alloc] initWithString:@"f5"];
                [friArray addObject:faj];
            }

        }
    //set friArray as NSMutableArray in NSUserDefaults Dictionary for some key
1 голос
/ 14 марта 2012
  1. Загрузка friArray как NSMutableArray из NSUser По умолчанию перед лестницей if-else
  2. Сохранение friArray в NSUSerDefaults в конце вашей лестницы if-else
  3. Не создавать массив вкаждый условный оператор
  4. Создать один раз в первый раз (Первый раз сохранить в NSUserDefaults).

    if([day1 objectForKey:@"frArr"] == nil) {

     // create array here.Happens first time. 
        friArray  = [[NSMutableArray alloc]init];
    }
    
0 голосов
/ 14 марта 2012
-(void)addData{  
   NSMutableDictionary *fridict
     = [[NSMutableDictionary alloc]init]; 

    if ([day isEqualToString:@"f"]) {

            if ([name isEqualToString:@"f"]) {
                NSString *faj = [[NSString alloc] initWithString:@"f1"];
    [fridict setObject: faj forKey:@"f1"];
                       }
            else if ([name isEqualToString:@"z"]) {
                NSString *faj = [[NSString alloc] initWithString:@"f2"];
                [fridict setObject: faj forKey:@"f2"];
            }
            else if ([name isEqualToString:@"a"]) {
                NSString *faj = [[NSString alloc] initWithString:@"f3"];
                [fridict setObject: faj forKey:@"f3"];
            }
            else if ([name isEqualToString:@"m"]) {
                NSString *faj = [[NSString alloc] initWithString:@"f4"];
                [fridict setObject: faj forKey:@"f4"];
            }
            else if ([name isEqualToString:@"i"]) {
                NSString *faj = [[NSString alloc] initWithString:@"f5"];
                [fridict setObject: faj forKey:@"f5"];
            }

    NSData *data = [NSKeyedArchiver archivedDataWithRootObject: fridict];
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        [defaults setObject:data forKey:@"fridict"];
}

-(void)retriveData{
 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSData *data = [defaults objectForKey:@"fridict"];
        NSMutableDictionary *fridict = [NSKeyedUnarchiver  unarchiveObjectWithData:data];
        NSString *faj = [fridict objectForKey:@"f1"];

}
...