在Iphone中进行Plist序列化?

时间:2012-04-17 08:45:26

标签: iphone

我有一个iPhone应用程序,我正在使用此代码。

NSPropertyListFormat plistFormat;
NSDictionary *payloadDict = [NSPropertyListSerialization 
                       propertyListWithData:subscriptionProduct.receipt 
                                    options:NSPropertyListImmutable 
                                     format:&plistFormat 
                                       error:nil]; 

我正确地获取subscriptionProduct.receipt并且reciept是一个nsdata,它在subscriptionProduct类中声明。但是当我尝试打印payloadDict时转换后它被定为null.can任何人帮助我

2 个答案:

答案 0 :(得分:1)

尝试从方法中获取错误并显示它:

NSPropertyListFormat plistFormat;
NSError *parseError;
NSDictionary *payloadDict = [NSPropertyListSerialization 
                       propertyListWithData:subscriptionProduct.receipt 
                                    options:NSPropertyListImmutable 
                                     format:&plistFormat 
                                      error:&parseError]; 

NSLog(@"payloadDict = %@", payloadDict);
NSLog(@"parseError = %@", parseError);

如果parseErrornil,则属性列表序列化认为它正确读取数据。如果没有,它的内容应告诉你在哪里看。

答案 1 :(得分:0)

您的评论似乎表明您要构建一个存储对象NSDictionary的新subscriptionProduct.receipt

你可以这样做:

NSMutableDictionary *payloadDict = [NSMutableDictionary dictionary];

// Always check if values are nil before adding them to a dictionary.
if (subscriptionProduct.receipt)
    [payloadDict setObject:subscriptionProduct.receipt forKey:@"receipt"];

如果您想稍后加载收据,可以执行以下操作:

NSData *receiptData = [payloadDict objectForKey:@"receipt"];