2013-12-17 2 views
2

버튼 작업 메서드 후에 사용자 정의 클래스 객체를 가져옵니다. 이제 NSMutableArray에 여러 사용자 지정 개체를 저장 한 다음이 배열을 NSUserDefaults에 저장해야합니다. 이 NSUserDefaults에 하나의 사용자 정의 클래스를 Store 객체를 절약, 위의 코드를 사용하여배열에 사용자 정의 객체를 저장하고 NSUserDefaults에 저장하는 방법 - iPhone

-(IBAction)onClickSubmitLater:(id)sender 
{ 
    //Saving store in user defaults for later upload data. 

    NSMutableArray *arrayStoreList = [[NSMutableArray alloc] init]; 
    arrayStoreList = [Util getArrayPreference:@"Store"];//arrayStoreList is the list of all stores. 

    Store *store = [[Store alloc] init]; 
    store = [arrayStoreList objectAtIndex:self.selectedStoreIndex];//here i am getting particular store that i need to save in array. 

    //archive 
    NSData *dataStore = [NSKeyedArchiver archivedDataWithRootObject:store]; 
    [[NSUserDefaults standardUserDefaults] setObject:dataStore forKey:@"resultStore"]; 

    //unarchive 
    NSData *dataResultStore = [[NSUserDefaults standardUserDefaults] objectForKey:@"resultStore"]; 

    Store *resultStore = (Store *)[NSKeyedUnarchiver unarchiveObjectWithData:dataResultStore]; 
    NSLog(@"%@", resultStore); 
} 

:

여기 내 코드입니다. 그래서 모든 Store 개체를 나중에 제출 한 후 NSMutableArray에 저장하고 싶습니다. 나중에 서버에 저장소를 하나씩 업로드하기위한 저장소 배열을 가져옵니다.

감사합니다.

+0

- (void) encodeWithCoder : (NSCoder *) encode; - (id) initWithCoder : (NSCoder *) 디코드; 스토어 엔티티에 구현했습니다. 왜 downvote? –

+0

NSUserDefaults는 환경 설정을 저장하는 데 사용되므로이 질문을 "NSUserDefaults를 사용해야합니까?" plist로 저장하고, 코더와 디코더 등을 사용하여 데이터를 저장하는 많은 옵션이 있습니다. nick lockwood가 작성한 아름다운 재사용 클래스가 있습니다. https://github.com/nicklockwood/BaseModel을보십시오. 나는 그것을 사용하는 것이 좋습니다. 감사! – iCoder

+0

예, 제 요구 사항에 따라 userDefaults를 사용해야합니다. Xcode에서 앱을 중지 한 후 그것은 같은 가게로 남아있을 것입니다. –

답변

1

이 두 가지 방법은 주로 storeretrieve 사용자 지정 개체의 속성에 사용됩니다. @ chrissr에서

- (void)encodeWithCoder:(NSCoder *)encoder ; 
- (id)initWithCoder:(NSCoder *)decoder; 

테이크 모양의 answer, @ 브래드 라슨의 당신은 NSCoding 프로토콜을 구현하여 보관해야 answer

+0

감사합니다 mani, 저장소 엔티티 클래스에서 NSCoding 메소드를 구현했습니다. –

+0

그 주석이 도움이된다면 방문객의 관심을 끌기 위해 틱이나 업 보트를 제공하십시오. :) – Mani

+0

올바른 @ 마니 있지만 내 문제는 NSMutableArray 모든 저장소 개체를 저장하는 것입니다. 위의 코드를 사용하여 Userdefaults에 하나의 클래스 객체를 저장합니다. 먼저 배열에 모든 저장소를 추가 한 다음이 배열을 userdefault에 저장해야합니다. –

2

. 그런 다음 파일에 쓸 수 있습니다.

은 모델에서 이러한 방법을 구현 :

당신이 말하는 것처럼
- (void) encodeWithCoder : (NSCoder *)encode ; 
- (id) initWithCoder : (NSCoder *)decode; 

, 당신은 클래스에서 이것을 구현, 이제 배열을 저장해야합니다.

배열을 저장하고 읽으려면 다음을 사용해야합니다.;

[[NSUserDefaults standardUserDefaults] setObject:yourMutableArray forKey:@"keyForArray"]; 
NSMutableArray *array = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"keyForArray"]]; 
+0

예 Store Entity 클래스에 대해 NSCoding을 완료했습니다. –

+0

그 다음 문제가 무엇입니까? –

+0

고마워 Anoop .. 내 위의 코드를 사용하여 하나의 저장소 개체 "resultStore"Userdefaults에 저장됩니다. 하지만 여기에 배열을 만들고 그 안에 모든 저장소 객체를 저장해야합니다. –

19

저장하고 사용자 기본 설정에서 사용자 정의 객체 배열을 검색하면 다음과 같은 방법을 사용하여 다음을 수행 할 수 있습니다

-(void)writeArrayWithCustomObjToUserDefaults:(NSString *)keyName withArray:(NSMutableArray *)myArray 
{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myArray]; 
    [defaults setObject:data forKey:keyName]; 
    [defaults synchronize]; 
} 

-(NSArray *)readArrayWithCustomObjFromUserDefaults:(NSString*)keyName 
{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSData *data = [defaults objectForKey:keyName]; 
    NSArray *myArray = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 
    [defaults synchronize]; 
    return myArray; 
} 

을하지만했는지 확인

- (void) encodeWithCoder : (NSCoder *)encode ; 
- (id) initWithCoder : (NSCoder *)decode; 

방법 데이터 모델 클래스에 구현 다음과 같이 충돌을 피하십시오.

- (void)encodeWithCoder:(NSCoder *)coder; 
{ 
    [coder encodeObject:label forKey:@"label"]; 
    [coder encodeInteger:numberID forKey:@"numberID"]; 
} 

- (id)initWithCoder:(NSCoder *)coder; 
{ 
    self = [super init]; 
    if (self != nil) 
    { 
     label = [[coder decodeObjectForKey:@"label"] retain]; 
     numberID = [[coder decodeIntegerForKey:@"numberID"] retain]; 
    } 
    return self; 
} 
+0

도와 주셔서 감사 드리며 사고를 피하십시오. 감사합니다. –

+0

@ AbdullahMd.Zubair 코드에서 어디에서나'encodeWithCoder'와'initWithCoder'를 사용해야합니까? –

+0

구현해야합니다. 그렇지 않으면 작동하지 않습니다. –

관련 문제