본문 바로가기

개발도구/iOS - 아이폰 개발

[아이폰] userDefaults에 저장된 값을 NSMutableArray 와 NSDictionary 통해 수정 변경 삭제 하기

userDefaults 의 channels로 이미 저장된 상태에서 NSMutableArray 로 불러들여 수정후 다시 저장하기 위한작업이다. 
왜 이런 작업을 하냐면, userDefaults에 (내장 기억장치?? 모 이렇게 생각하면 쉽다) 직접 수정이 불가 하기 때문이다.
NSArray 역시 한번 정한 값은 수정이 불가 하니 정적인 배열함수인 NSMutableArray을 사용함이 좋다.
NSMutableArray 역시 remove의 메소드가 있음에도 불구하고 작동이 되나 말다, 또는 null값으로 된 경우가 있다.
계속 풀다가 결국은 못하고 아래와 같은 방법으로 다시 정의하게 되었다. 올래 이렇게 하는건지도 모른다 ㅎ

 NSMutableArray *selectedChannels1 = [[NSMutableArray alloc] init]; // userdefault값을 넣기 위한 배열선언

    channels = [[NSMutableArray arrayWithArray:[userDefaults arrayForKey:@"channels"]] retain]; // userdafault의 channels 을 값고 온다. 

    for (NSDictionary *channel in channels) { // 갖고 온 channels 값을 다시 NSDicitionnary 넣어 아래와 같이 objectForKey 값으로 배열을 수정할수 있다.

       // NSLog(@"%@",[channel objectForKey:@"id"]);

        if ([[channel objectForKey:@"id"] isEqualToString:@"CH_SPORT"] || [[channel objectForKey:@"id"] isEqualToString:@"AABBCC(키값)"]) {

        //    [channel removeObjectsForKeys: AABBCC];            // 이와 같이 하려 했는데 작동하지 않느다. ㅠ

            //   [selectedChannels addObject:channel]; // 추가는 이렇게 하는것

        }else{

            if ([[channel objectForKey:@"selected"] isEqualToString:@"YES"]) {   //AABBCC 안에 selected 값이 YES 인걸 찾기 이미 선언되어 잇는 값... 참 설명하기 어렵 ㅠ

             // NSLog(@"%@",[channel objectForKey:@"id"]);

                [selectedChannels1 addObject:channel]; // 결국 if절을 통해 원하는 object 을 갖고 와서 저장하게 되었다.

            }

        

        }


윗 부분은 그냥 쉽게 복사해서 붙여 넣기 하는 식것 보다는 오브젝트 c을 공부함이 좋다.
이 부분을 이해하려고 2일이 걸림.. 역시 난 프로그램의 기질과는 거리가 멀다. ㅠ       

    }

    

 저장된 selectedChannels 을 userDefaults 에 아래와 같이 넣어 닫는다. 

    [userDefaults setObject:selectedChannels1 forKey:@"selectedChannels"];

    [selectedChannels1 release];

    [userDefaults synchronize];