2013-04-07 11 views
18

こんにちは、レストランオブジェクトから4つのリストを作成しようとしています。私のアプリケーションにはさまざまなレストランのリストがあります。ユーザーが好きなレストランを追加できます。動作していません。プロパティ値以外の値を挿入しようとしました。目的C

- (IBAction)toggleFav:(id)sender { 

    Restaurant *resto = [self restaure]; 

    NSMutableDictionary *dic = [[NSMutableDictionary alloc] init]; 
    [dic setObject:resto.price forKey:@"restoPrice"]; 
    [dic setObject:resto.restaurantId forKey:@"restaurantId"]; 
    [dic setObject:resto.restoAbout forKey:@"restoAbout"]; 
    [dic setObject:resto.restoAddress forKey:@"restoAddress"]; 
    [dic setObject:resto.restoBeverages forKey:@"restoBeverages"]; 
    [dic setObject:resto.restoCategory forKey:@"restoCategory"]; 
    [dic setObject:resto.restoEmail forKey:@"restoEmail"]; 
    [dic setObject:resto.restoLogo forKey:@"restoLogo"]; 
    [dic setObject:resto.restoName forKey:@"restoName"]; 
    [dic setObject:resto.restoPhone forKey:@"restoPhone"]; 
    [dic setObject:resto.restoCity forKey:@"restoCity"]; 

    NSArray *dicArray = [dic allKeys]; 


    if([sender isSelected]){ 
     //... 
     [sender setSelected:NO]; 
     NSMutableArray *array = [[[NSUserDefaults standardUserDefaults] objectForKey:@"restoName"] mutableCopy]; 
     [array removeObject:dicArray]; 
     [[NSUserDefaults standardUserDefaults] setObject:array forKey:@"restoName"]; 

    } else { 
     //... 
     [sender setSelected:YES]; 
     NSMutableArray *array = [[[NSUserDefaults standardUserDefaults] objectForKey:@"restoName"] mutableCopy]; 
     [array addObject:dicArray]; 
     [[NSUserDefaults standardUserDefaults] setObject:array forKey:@"restoName"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 

     //NSLog(@"%@",[[NSUserDefaults standardUserDefaults] stringForKey:@"restoName"]); 
    } 
} 

'クラスの「__NSCFArray」です。プロパティリストの辞書と配列には、プロパティ値のみが含まれている必要があることに注意してください。

+2

辞書をチェックしてくださいは、任意のnull値はありませんか? – Exploring

答えて

17

NSUserDefaultsには、プロパティリストタイプ(配列、データ、文字列、番号、日付、辞書)またはURLのみを格納できます。モデルオブジェクトをモデルオブジェクトに変換する必要があります。

+0

どうすればいいですか、ごめんなさい – mavusane

+3

NSDictionaryを作成し、オブジェクトのすべてのプロパティをその中に入れることができます。または、NSCodingを実装して、それを使用することができます。類似しているはずです(NSCodingで見つからない場合はNSKeyedArchiverを検索してください) –

+0

こんにちは、私のコードを参照してください。 、これを試して3日を信じることはできません、エンコード方法では、NSObject をどこに置くべきか分かりません。なぜなら、detailViewクラスがこの@interfaceを実装しているからです。DetailViewController:UIViewController – mavusane

57

すべてのあなたの辞書の値は、プロパティリストのタイプがあり、その後、あなたは、単にNSDataのに辞書を変換することができます確保について気にしたくない場合は、

NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; 
[def setObject:[NSKeyedArchiver archivedDataWithRootObject:self.myDictionary] forKey:@"MyData"]; 
[def synchronize]; 

そしてサンドボックスから辞書に戻ろうとします:

NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; 
NSData *data = [def objectForKey:@"MyData"]; 
NSDictionary *retrievedDictionary = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 
self.myDictionary = [[NSDictionary alloc] initWithDictionary:retrievedDictionary]; 

これは誰かを助けることを望みます。 :D


追加注:あなたは可変辞書や可変配列を取得している場合は、「mutableCopy」メソッドを使用することを忘れないでください。それ以外の場合は、検索された辞書/配列からオブジェクトを追加または削除することはできません。たとえば:

NSMutableDictionary *retrievedDictionary = 
[[NSKeyedUnarchiver unarchiveObjectWithData:data] mutableCopy]; 

それとも

NSMutableArray *retrievedArray = 
[[NSKeyedUnarchiver unarchiveObjectWithData:data] mutableCopy]; 
+4

ありがとう、これは私に頭痛や3を救った。 – mmr

+1

すばやく簡単なソリューション。ありがとう。 – user3344977

+2

これは受け入れる必要があります..ありがとうたくさん@ロチョロス。 – TamilKing

関連する問題