在我们的代码中,我们执行以下操作:
- (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。
知道发生了什么以及我们如何解决它?
答案 0 :(得分:3)
字典应该被序列化为正确的列表,这应该保留类型。您确定id
真的是NSString
吗? (另外,我同意其他评论者的意见,你应该使用不同的变量名称,以避免与类型id
混淆。)
一种可能性是它实际上是NSDecimalNumber
,它被写成数字类型并作为NSNumber
解析回来,失去了精确度。
试试这个:
NSLog(@"Class of id: %@", NSStringFromClass([id class]));
如果它毕竟是数字类型,你可以这样做:
[facebookArguments setObject:[id stringValue] forKey:FACEBOOK_COMMENTS_FOR_ID_KEY];