-1

重複の可能性:
UIColor の保存と NSUserDefaults からの読み込み

ユーザーのデフォルトを初期化し、NSDictionary を作成し、データを入力し、デフォルトを再設定することを考えています。しかし、このコードにはエラーがあります。

//if UserFilter entry is nothing, create.
NSDictionary *defaultFilter = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:0] forKey:@"UserFilter"];
[userDefaults registerDefaults:defaultFilter];

//if UserBadgeColor entry is nothing, create.
UIColor *color = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
NSValue *valColor = [NSValue value:&color withObjCType:@encode(UIColor)];
NSDictionary *defaultBadgeColor = [NSDictionary dictionaryWithObject:valColor forKey:@"UserBadgeColor"];
[userDefaults registerDefaults:defaultBadgeColor];

実行中、UserFilter部分は問題ありません。しかし、UserBadgeFilter 部分にエラーがあります。エラー行は最後です。

ありがとう。

4

1 に答える 1

1

マニュアルから:

NSUserDefaults クラスは、float、double、integer、Boolean、URL などの一般的な型にアクセスするための便利なメソッドを提供します。デフォルト オブジェクトは、プロパティ リスト、つまり、NSData、NSString、NSNumber、NSDate、NSArray、または NSDictionary のインスタンス (またはコレクションの場合はインスタンスの組み合わせ) である必要があります。他のタイプのオブジェクトを保存する場合は、通常、アーカイブして NSData のインスタンスを作成する必要があります。

しかし、単に NSData を使用できるので、あなたの場合:

UIColor *color = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
NSData* colorData= [NSKeyedArchiver archivedDataWithRootObject: color];
NSDictionary *defaultBadgeColor = [NSDictionary dictionaryWithObject: colorData forKey:@"UserBadgeColor"];
[userDefaults registerDefaults:defaultBadgeColor];

デフォルトから読み取るときは、 NSKeyedUnarchiver を使用してデータを UIColor にデコードします

于 2013-01-05T20:25:30.770 に答える