2012-03-22 3 views
0

사용자가 앱 내의 설정에 액세스하는 것을 선호하기 때문에 설정 번들을 사용하여 앱의 설정을 저장하지 않습니다 (상당히 자주 변경 될 수 있음) . 두 가지를 모두 할 수있는 옵션이 있다는 것을 알고 있지만, 현재로서는 앱 내에 설정을 저장할 최적의 장소를 찾으려고합니다.iPhone 앱용 설정을 저장하는 가장 효율적인 대체 방법

나는 (내가 읽은 것, 아마도 NSUserDefaults에 대해 너무 많은) 설정을 가지고 있으며 내가 고려하고있는 두 가지 주요 옵션은 다음과 같다. 1) plist의 사전에 설정을 저장하고 설정을 응용 프로그램 대리인의 NSDictionary 속성에 저장하고 sharedDelegate를 통해 액세스합니다. 2) 설정을 핵심 엔터티 (설정 엔터티의 1 행)에 저장하고 설정을 응용 프로그램 대리인의 설정 개체로로드 한 다음 sharedDelegate

이 두 가지 중에서 최적의 방법은 성능이 현명한가요?

+0

'NSDefaults'에 너무 많습니까? 천 키가 있다면 아마도, 네. 그러나 그런 다음에 설정을 잘못하고 있습니다. – Costique

+1

많은 양의 설정으로 NSUserDefaults를 사용하지 않으려면 모든 설정이 포함 된 개체를 만들지 말고 NSCoding 프로토콜을 따르고 응용 프로그램 종료/저장에 사인을 적용한 다음 응용 프로그램 didFinishLaunching에로드하십시오. – bennythemink

+1

많은 데이터를 저장하면 "사용"[ud synchronize]'!! 1111one "- 스택 오버플로에서 보았던 답변을 잊어 버릴 수 있습니다. 그들은 어쨌든 일반적으로 잘못되었습니다. 모든'setObject : forKey :'후에 동기화를 호출하지 마십시오. 아무런 문제가 없습니다. –

답변

3

그냥 NSUserDefaults를 사용하십시오. 네가 너무 많은 것을 가지고 있다고 왜 느끼는거야?

나중에 설정 번들을 사용하기로 결정하면 NSUserDefaults를 사용해야합니다.

+0

위의 두 옵션보다 성능이 현명한 편입니까? 위의 두 가지 중 어느 것이 좋을지 (또는 설정 수)가 있습니까? 나는이 보드를 꽤 많이 읽고 있었고, * 나는 Marcus Zarra가 코어 데이터의 설정을 저장할 때가 더 최적이라는 것을 알았지 만 어떤 스레드인지는 알지 못한다. (그리고 나는 그렇지 않다. 그가 최적이라고 생각했을 때 *를 설명했다.) – SAHM

+2

성능 향상이 눈에 띄기에 충분할 정도로 기본값에 액세스하는 상황이 실제로 없습니다. 또한 NSUserDefaults는 실제로 plist 일 뿐이므로 이미 존재하는 것을 구현하게 될 것입니다. – sosborn

1

NSUserDefaults와 함께 사용해야합니다. NSUserDefaults가 많이 있다고 생각된다면 1 모델 클래스를 만들어 함께 사용하라고 제안합니다. 하나의 모델 클래스를 만들고 등록 정보로 설정하고 해당 클래스의 객체를 만들고 NSUserDefaults에 저장하면 한 번만 구현되기 때문에 쉽게 사용할 수 있습니다. 당신이 의심이있는 경우

@interface SettingsModelClass : NSObject 
{ 
    NSString *strSetting1; 
    BOOL boolSetting2; 
} 

@property (nonatomic,retain) NSString *strSetting1; 
@property (nonatomic,assign) BOOL boolSetting2; 

// Implementaiton는

@implementation SettingsModelClass 

@synthesize strSetting1, boolSetting2; 

-(void)dealloc 
{ 
    [strSetting1 release]; 
    [super dealloc]; 
} 

- (void)encodeWithCoder:(NSCoder *)encoder 
{ 
    //Encode properties, other class variables, etc 
    [encoder encodeObject:self.strSetting1 forKey:@"StringSetting"];  
    [encoder encodeBool:self.boolSetting2 forKey:@"BoolSetting"]; 
} 

- (id)initWithCoder:(NSCoder *)decoder 
{ 
    self = [super init]; 
    if(self != nil) 
    { 
     //decode properties, other class vars 
     self.strSetting1 = [decoder decodeObjectForKey:@"StringSetting"]; 
     self.boolSetting2 = [decoder decodeBoolForKey:@"BoolSetting"]; 
    } 
    return self; 
} 

@end 

남겨주세요 의견. 나는 너를 돕고 싶다.

업데이트 예 응용 프로그램 대리인을 통해 액세스 할 수 있습니다. 또는 싱글 톤 클래스 인스턴스로 만들 수도 있습니다. 이 접근법은 OOPS fundas를 사용하므로 내가 믿는이 패턴을 따르는 배터입니다.

+0

이 방법은 스트레이트 업 NSUserDefaults를 사용하는 것보다 어떤 점 (즉, 얼마나 많은 설정)으로 유리합니까? – SAHM

+0

또한 앱 위임의 SettingsModelClass 객체에 설정을로드하고 앱 전체에서 sharedDelegate를 통해 액세스 할 수 있습니까? 그렇지 않은 경우 앱 전체에서 다양한보기 컨트롤러의 설정을로드하거나 액세스하려면 어떻게해야합니까? – SAHM

+0

내 업데이트 된 답변을 참조하십시오 –

관련 문제