在我们的代码中,我们执行以下操作:
- (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];
}
但在调用此代码时:
NSMutableDictionary* fbArgsDic = [[NSMutableDictionary alloc] initWithContentsOfFile: facebookArgumentsFilePath];
NSLog(@"Dictionary: %@", fbArgsDic);
以下是之前的日志输出:
2011-08-04 16:11:53.938 My_App[30909:207] Dictionary: {
facebookGetCommentsForIdComment = Legend;
facebookGetCommentsForIdKey = 10150249987646875;
facebookLikeForIdKey = 10150249445616875;
}
之后:
2011-08-04 16:06:39.685 My_App[30693:207] Dictionary: {
facebookGetCommentsForIdComment = Legend;
facebookGetCommentsForIdKey = "1.015024998764688e+16";
facebookLikeForIdKey = 10150249445616875;
}
它将facebook上的comments-for-id-key条目(如上图所示为nsstring)转换为nsnumber,并丢失了一些数字。这些是长号码,因为它们是facebook的id。
知道发生什么了吗?我们怎么解决?
最佳答案
字典应该被序列化为一个正确的列表,它应该保留类型。你确定id
是一个真正的NSString
开始吗?(另外,我同意其他注释者的看法,即应该使用不同的变量名,以避免与id
类型混淆)
一种可能是它实际上是一个NSDecimalNumber
,它以数字类型写出来,然后作为NSNumber
解析回来,失去了精度。
试试这个:
NSLog(@"Class of id: %@", NSStringFromClass([id class]));
如果它毕竟是一种数字类型,您可以执行以下操作:
[facebookArguments setObject:[id stringValue] forKey:FACEBOOK_COMMENTS_FOR_ID_KEY];
关于iphone - 如何防止NSMutableDictionary在initWithContentsOfFile时将我的长NSString转换为NSNumber?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6942831/