2012-04-12 6 views
0

現在、NSMutabledictionaryのキーとオブジェクトをplistファイルに保存しようとしています。私のキーは整数なので、NSNumberを使ってwriteToFile関数に入れます。NSMutable辞書データをplistファイルに保存します_整数をキーとして保存

この変更があっても、plistの検索で保存したデータは見つかりません。私はNSNumberポインタに問題があると仮定します。なぜなら、文字列を使用すると、それは機能します。

あなたは自分のコードに何が欠けているか考えていますか?

NSMutableDictionary *dictionnaireNoms = [[NSMutableDictionary alloc] initWithCapacity:40]; 
    NSNumber *nombre = [[NSNumber alloc] initWithInteger:dictionnaireNoms.count];   
    NSString *nomCommerce = text.text; 
    [dictionnaireNoms setObject:nomCommerce forKey:nombre]; 

    //2. Sauvegarde du nom dans un fichier 
    [saveDicoCommerce enregisterNom:dictionnaireNoms]; 


- (void)enregisterNom:(NSMutableDictionary*)nom 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSLog(@"%@", documentsDirectory); 
    NSString *pathNom = [documentsDirectory stringByAppendingPathComponent:@"NomsDeCommerces.plist"]; 
    if (!documentsDirectory) { 
     NSLog(@"Documents directory not found!"); 
     return; 
    } 
    [nom writeToFile:pathNom atomically:YES]; 
    if(![[NSFileManager defaultManager] fileExistsAtPath:pathNom]) 
    { 
     NSLog(@"file not found"); 
     return; 
    } 

} 
+0

※オブジェクト型データはnsdictionaryに保存することはできません –

+0

ありがとうございました。 NSMutableDictionaryで整数をキーとして設定することは不可能であることを意味しますか? –

+0

NSMutableDictionaryのwriteToFile:Atomicallyメソッドで見つかった "このメソッドは、ファイルを書き出す前に、すべてのオブジェクトがプロパティリストオブジェクト(NSData、NSDate、NSNumber、NSString、NSArray、NSDictionaryのインスタンス)であることを再帰的に検証します。結果のファイルは有効なプロパティリストではないため、すべてのオブジェクトがプロパティリストオブジェクトでない場合はNOを返します。 –

答えて

3

NSDictionaryは、文字列キーのみが含まれている場合は、直接書き込むことができます。フォーマットの無効

プロパティリスト:200(プロパティリスト辞書は唯一「CFNumber」、CFStringsある鍵を持っていない場合があります)

それはあなたが出力され

[[NSPropertyListSerialization dataWithPropertyList:nom format:NSPropertyListBinaryFormat_v1_0 options:0 error:nil] writeToFile:pathNom atomically:NO];` 

を使用して書き込もうと、これを確認し、あなたはそれがNSCodingを使用してシリアライズ場合

ただし、NSNumberキーを含むNSDictionaryオブジェクトを格納することができます。これを置き換えます

[nom writeToFile:pathNom atomically:YES]; 

で:

[NSKeyedArchiver archiveRootObject:nom toFile:pathNom]; 

作成したファイルを読み取るには、使用:

NSDictionary *nom2 = [NSKeyedUnarchiver unarchiveObjectWithFile:pathNom]; 

のアーカイブの詳細については、Archives and Serializations Programming Guideを参照してください。

+0

ありがとうございました。 –

0

なぜNSNumberを割り当てたいのですか?この[your_dictionary setValue:[NSNumber numberWithInt:your_int]]を試してください;

+0

申し訳ありませんでした。 –

関連する問題