2011-08-04 10 views
3

我々は次のようにします。NSMutableDictionaryがinitWithContentsOfFileで長いNSStringをNSNumberに変換しないようにするにはどうすればよいですか?私たちのコードでは

- (void) createComment:(NSString *)comment ForId:(NSString *)objectId 
{  
    [facebookArguments setObject:objectId forKey:FACEBOOK_COMMENTS_FOR_ID_KEY ]; 
    [facebookArguments setObject:comment forKey:FACEBOOK_COMMENTS_FOR_ID_COMMENT]; 
    [facebookPrefs writeToFile:facebookPrefsFilePath atomically: NO]; 
    [facebookArguments writeToFile:facebookArgumentsFilePath atomically:NO]; 
} 

が、このコードを呼び出すときに:

2011-08-04 16:11:53.938 My_App[30909:207] Dictionary: { 
    facebookGetCommentsForIdComment = Legend; 
    facebookGetCommentsForIdKey = 10150249987646875; 
    facebookLikeForIdKey = 10150249445616875; 
} 

以降:

NSMutableDictionary* fbArgsDic = [[NSMutableDictionary alloc] initWithContentsOfFile: facebookArgumentsFilePath]; 
NSLog(@"Dictionary: %@", fbArgsDic); 

ここでログ出力の前だ

2011-08-04 16:06:39.685 My_App[30693:207] Dictionary: { 
    facebookGetCommentsForIdComment = Legend; 
    facebookGetCommentsForIdKey = "1.015024998764688e+16"; 
    facebookLikeForIdKey = 10150249445616875; 
} 

上記のNSStringであったFACEBOOK_COMMENTS_FOR_ID_KEYエントリをNSNumberに変換していくつかの数字を失った。これらは、facebook idのように長い数字です。

何が起こっているのか、どのように修正することができますか?

+0

は、なぜあなたは、ログ出力を投稿しませんでしたか?そして例のID。 – Joe

+1

私は予約されたキーワードなので、あなたはその文字列 'id'を呼び出すべきではないと思います。しかし、それが問題なのかどうかわからない – andreamazz

+0

'facebookGetCommentsForIdKey'辞書は自動リリースされていると思います。 'retain'を使って試しましたか? – Hisenberg

答えて

3

辞書は適切なリストとしてシリアル化されているはずです。これは型を保持する必要があります。 idは本当にNSStringで始まると思いますか?また、別の変数名を使用してタイプidと混同しないようにする必要があることに同意します。

実際にはNSDecimalNumberで数値型として書き出され、解析されますNSNumberとして、精度が失われます。

はこのお試しください:

NSLog(@"Class of id: %@", NSStringFromClass([id class])); 

をそして、それは後に、すべての数値型の場合、あなたが行うことができます:

[facebookArguments setObject:[id stringValue] forKey:FACEBOOK_COMMENTS_FOR_ID_KEY]; 
+0

あなたはインターネットで勝利します。私はメソッドシグネチャが私のためにNSString *を強制すると思った。そうではありません。変数の名前も変更されました。ありがとう。 –

+0

JSONやXMLパーサからその番号を取得しているとします。その値を返すメソッドには「id」という型があります。つまり、「この変数は動的に型指定されています」という意味です。たとえばインターネットなどから取得した値の実際のタイプを明示的にチェックすることを強くおすすめします。 '[val isKindOfClass:[NSNumber class]]'型不一致をキャッチします。 Web APIにバグがあり、タイプが間違っている場合、クラッシュする代わりに正常に状況を処理できます。 (私はEtsy APIの苦しい経験からこれを学びました) –

+0

Facebookのライブラリを使ってfacebook fql APIを使用しています。しかたがない。 –

関連する問題